sql - SELECT MAX记录行记录不在范围内

时间:2017-08-11 04:23:59

标签: sql sql-server

我的user_trans表看起来像这样

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

我需要选择date_to不在所选日期范围内的最大用户记录。选定日期2013年1月3日 - 2013年3月15日

如果我将查询编写为

 User_ID    Date_To
  00001    2013-03-05
  00026    2013-02-15

将选择如下

{{1}}

由于某些记录user_ID 0001属于所选日期的范围,因此我不希望任何记录出现在结果中。我怎么能这样做?

谢谢。

2 个答案:

答案 0 :(得分:1)

像这样的东西

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

答案 1 :(得分:0)

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