SQL2005或者oracle中:
select 产品名,max(产品名) over(partition 一个能区分开不同产品的列信息) as 最新型号
from 表名;
注:一个能区分开不同产品的列信息 指的是如:
XX1X 、XX2X、XX3X 都是第一类产品,假设编码是 001
YY、YY2 都是第二类产品,假设编码是 002
这个编码就是能区分不同产品的列信息。
----
以上,希望对你有所帮助。
你是要做update操作还是select呢?
什么数据库呢?
XX YY ZZ长度固定的么? 如果是,这样肯定行
SELECT 产品名,
(SELECT MAX(产品名) FROM A WHERE 产品名 LIKE SUBSTRING(t.产品名, 1, 2) || '%')
FROM A t
如果这个不行,尝试下面这个,这个DB2测试通过了,但是比较繁琐
SELECT t1.产品名, t2.产品名
FROM A t1 LEFT JOIN
(SELECT SUBSTRING(产品名, 1, 2) AS subID, 产品名
FROM
(SELECT 产品名, ROW_NUMBER() OVER(PARTITION BY SUBSTRING(产品名, 1, 2)
ORDER BY SUBSTRING(产品名, 3, 1) DESC) rk
FROM A) t
WHERE rk = 1) t2
ON t1.产品名 LIKE t2.subID || '%'
如果只是查询,可以这样、
select 产品名,最新型号=(select max(产品名) from table1 where left(产品名,2)=t1.left(产品名,2)) from table1 t1
如果在表中加一行
alter table table1 add 最新型号 varchar(50)
update table1 set 最新型号=(select max(产品名) from table1 where left(产品名,2)=t1.left(产品名,2)) from table1 t1
看你给出的表的意思,产品名和最新型号是一个东西(编码都是一样)?就是要新增一列?
declare @oldtype nvarchar(10)
ALTER A表 add newtype nvarchar(10) null
GO
DECLARE A_cursor CURSOR FOR select oldtype from A表
OPEN A_cursor
FETCH NEXT FROM A_cursor INTO @oldtype
WHILE @@FETCH_STATUS = 0
BEGIN
update A表 set newtype=(select max(oldtype)FROM A表 where left(oldtype,2)=left(@oldtype,2))
WHERE oldtype=@oldtype
FETCH A_cursor INTO @oldtype
END
CLOSE A_cursor
DEALLOCATE A_cursor
查的话直接select 就OK吧
SELECT A1.产品名,Max(A2.产品名) as 最新型号 FROM A A1,A A2 WHERE SUBSTR(A1.产品名,1,2) = SUBSTR(A2.产品名,1,2) GROUP BY A1.产品名