SQL - 选择记录MAX排凡范围

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落入所选日期的范围,我不希望任何记录出现在结果中。我怎样才能做到这一点?

谢谢。

+0

是EMPLOYEE_ID只是一个错字?您的示例数据中未提及。 – Alex

+0

@Alex我猜EMPLOYEE_ID是基于查询的USER_ID的拼写错误。 –

类似的东西

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 
+0

这是用于SQL Server吗?我不记得具有'MINUS'关键字的SQL Server。这个问题具体提到sql-server标签 – Alex

+0

好的。使用'except'而不是minus。我编辑了我的文章 –

+0

这不能在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