这句SQL语句该怎么写,请教高手!
数据库里有每个用户发布的产品,每个用户都可以发布多条产品。产品发布后用户在后台可一次更新一条产品的发布时间,也可以一键更新全部产品的发布时间,此时用户发布的产品全部时间都相同,如下表中的用户ID:9,
我现在想从这个表中每个对应用户都只提取出一条产品显示,提取出的产品要求:1、是用户最新发布或更新的那条产品,
2、如果用户是一键更新过的那条产品,所有产品时间都是相同的,那么在这样情况下就提取它ID最大产品,请问该如何写这句SQL语句
产品编号 对应用户ID 发布时间
SMT_id dyid SMT_data
1 9 2012-4-12 14:33:36
2 11 2012-4-18 19:23:36
3 9 2012-4-12 14:33:36
4 9 2012-4-12 14:33:36
5 12 2012-5-19 19:23:36
6 11 2012-3-17 19:23:36
想要的结果
产品编号 对应用户ID 发布时间
SMT_id dyid SMT_data
5 12 2012-5-19 19:23:36
2 11 2012-4-18 19:23:36
4 9 2012-4-12 14:33:36
[解决办法]
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([SMT_id] INT,[dyid] INT,[SMT_data] DATETIME)INSERT [tb]SELECT 1,9,'2012-4-12 14:33:36' UNION ALLSELECT 2,11,'2012-4-18 19:23:36' UNION ALLSELECT 3,9,'2012-4-12 14:33:36' UNION ALLSELECT 4,9,'2012-4-12 14:33:36' UNION ALLSELECT 5,12,'2012-5-19 19:23:36' UNION ALLSELECT 6,11,'2012-3-17 19:23:36'--------------开始查询----------------------------1SELECT * FROM [tb] t WHERE NOT EXISTS(SELECT 1 FROM [tb] WHERE [SMT_data]=t.[SMT_data] AND [SMT_id]>t.[SMT_id])AND NOT EXISTS(SELECT 1 FROM [tb] WHERE [dyid]=t.[dyid] AND [SMT_data]>t.[SMT_data])--2SELECT * FROM [tb] t WHERE [SMT_id]=(SELECT MAX([SMT_id]) FROM [tb] WHERE [SMT_data]=t.[SMT_data])AND [SMT_data]=(SELECT MAX([SMT_data]) FROM [tb] WHERE [dyid]=t.[dyid])----------------结果----------------------------/* SMT_id dyid SMT_data----------- ----------- -----------------------2 11 2012-04-18 19:23:36.0004 9 2012-04-12 14:33:36.0005 12 2012-05-19 19:23:36.000(3 行受影响)*/
[解决办法]