SQL - 选择记录MAX排凡范围
我user_trans表看起来像这样SQL - 选择记录MAX排凡范围
ID User_ID User_No Date_From Date_To
1 00001 KJH789 2013-03-02 2013-03-05
2 00001 KJH789 2013-03-07 2013-03-30
3 00001 KJH789 2013-02-28 2013-03-01
4 00001 KJH789 2013-02-01 2013-02-15
5 00026 RTW763 2013-02-01 2013-02-15
6 00026 RTW763 2013-01-01 2013-01-15
我需要选择DATE_TO选定的日期范围内不属于用户的最高纪录。所选日期2013年1月3日 - 15/3/2013
如果我写我的查询作为
SELECT USER_ID,
MAX(DATE_TO) AS DATE_TO
FROM USER_TRANS
WHERE DATE_TO <= CONVERT (datetime, (({d '2013-03-15' })+1)
GROUP BY USER_ID
这将选择如下
User_ID Date_To
00001 2013-03-05
00026 2013-02-15
由于一些记录USER_ID 0001落入所选日期的范围,我不希望任何记录出现在结果中。我怎样才能做到这一点?
谢谢。
类似的东西
SELECT USER_ID,
MAX(DATE_TO) AS DATE_TO
FROM USER_TRANS WHERE
USER_ID IN (SELECT USER_ID FROM USER_TRANS EXCEPT
SELECT USER_ID FROM USER_TRANS
WHERE DATE_TO BETWEEN CONVERT (datetime, (({d '2013-03-01' })) AND CONVERT (datetime, (({d '2013-03-15' }))
)
GROUP BY USER_ID
这是用于SQL Server吗?我不记得具有'MINUS'关键字的SQL Server。这个问题具体提到sql-server标签 – Alex
好的。使用'except'而不是minus。我编辑了我的文章 –
这不能在sql server中编译。 –
SELECT USER_ID,
MAX(DATE_TO) AS DATE_TO
FROM USER_TRANS u1
WHERE NOT EXISTS
(SELECT * FROM USER_TRANS u2 WHERE u2.user_id = u1.user_id
and date_to BETWEEN '3/1/2013' AND '3/15/2013')
GROUP BY USER_ID
是EMPLOYEE_ID只是一个错字?您的示例数据中未提及。 – Alex
@Alex我猜EMPLOYEE_ID是基于查询的USER_ID的拼写错误。 –