试一下这样:SELECT t1.a as A, (SELECT TOP 1 t2.b FROM PPP t2 WHERE t2.a=t1.a AND t2.c=MAX(t1.c) ORDER BY t2.b DESC) AS B, --加了这句 MAX(t1.c) as C FROM PPP t1 GROUP BY t1.a
select distinct a from tbale order by b desc 就可以了
SELECT * FROM PPP t1 WHERE c IN (SELECT MAX(c) FROM PPP t2 WHERE t2.a=t1.a) AND b IN (SELECT TOP 1 b FROM PPP t3 WHERE t3.a=t1.a AND t3.c=t1.c ORDER BY b DESC)(跟原来一样的思路,只是改了样子)
我有个思路,既然是要先按照A来分类,那么就把A列相同记录的取出作为一个表T_N(如果A列有N个不同的类,那么就得有个N个表了),再取出每个分出的表中C列最大日期的记录取出来。讲不同的T_N表中取出的那些记录 union .得出你的问题解。
你验证一下吧,在我机器里可以得到你要的结果: SELECT A,B,C FROM PPP WHERE B IN (SELECT MAX(B) FROM PPP GROUP BY A)
感谢您的回答:我的问题是属性列B是不能用MAX来取得的,它最大日期那行的B值,并不是最大值
感谢您的回答:不过我要强调一点MAX(C)是不能去的,因为我需要的最大日期的那行数据,不是最大的属性列B的那行数据!!
on T1.A = T2.A and T1.C = T2.C
十万感谢您的回答:您的方法我也是考虑过的,采用这种方法一定会在结果集中存在
(2 4 2003-2-5)这条记录。假如以A列(2)为例,我需要按时间C降序排序的TOP1的那行数据
(SELECT TOP 1 t2.b FROM PPP t2
WHERE t2.a=t1.a
ORDER BY t2.b DESC) AS B,
MAX(t1.c) as C
FROM PPP t1
GROUP BY t1.a
SELECT t1.a as A,
(SELECT TOP 1 t2.b FROM PPP t2
WHERE t2.a=t1.a AND t2.c=MAX(t1.c)) AS B,
MAX(t1.c) as C
FROM PPP t1
GROUP BY t1.a
你试试
看看能不能改变时间日期类型,改为:yy,mm,dd,hh,mm,ss
这样避免有相同时间日期的记录
否则你的最大日期有两条记录的
列名 A(Varchar(50)) B(Varchar(50)) C(DateTime(50))
2 HAHAHA 2003-2-5
2 HEHEHE 2003-2-5 我需要的结果是(2 HEHEHE 2003-2-5),而不是(2 HAHAHA 2003-2-5),这样显然排序是不能解决的
(SELECT TOP 1 t2.b FROM PPP t2
WHERE t2.a=t1.a AND t2.c=MAX(t1.c)
ORDER BY t2.b DESC) AS B, --加了这句
MAX(t1.c) as C
FROM PPP t1
GROUP BY t1.a
就可以了
WHERE c IN (SELECT MAX(c) FROM PPP t2
WHERE t2.a=t1.a) AND
b IN (SELECT TOP 1 b FROM PPP t3
WHERE t3.a=t1.a AND t3.c=t1.c
ORDER BY b DESC)(跟原来一样的思路,只是改了样子)
你验证一下吧,在我机器里可以得到你要的结果:
SELECT A,B,C FROM PPP WHERE B IN (SELECT MAX(B) FROM PPP GROUP BY A)