MSSQL - 如果此ID的所有行的条件有效,则检索ID

时间:2014-07-28 11:29:57

标签: sql-server select

只是一个简单的问题。我有这样的表:

╔══════╦═════════════╗
║ id   ║     date    ║
╠══════╬═════════════╣
║   90 ║  2100-01-01 ║
║   90 ║  2100-01-01 ║
║   91 ║  2100-01-01 ║
║   91 ║  null       ║
║   92 ║  2100-01-01 ║
║   92 ║  2100-01-01 ║
║   92 ║  null       ║
║   93 ║  2100-01-01 ║
╚══════╩═════════════╝

我想编写一个查询,该查询只检索那些日期高于当前日期的ID。我那样的话:

╔════╗
║ id ║
╠════╣
║ 90 ║
║ 93 ║
╚════╝

谢谢!

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT distinct id 
FROM   table1 
WHERE  id NOT IN (SELECT id 
                  FROM   table1 
                  WHERE  isnull(date,'') < Getdate()) 

查看 SQL Fiddle

上的工作示例

答案 1 :(得分:0)

所以你想找到所有日期都在以后的所有ID吗?我会使用NOT EXISTS

SELECT distinct(id) 
FROM   table1 t1
WHERE NOT EXISTS
(
  SELECT 1 FROM table1 t2
  WHERE t2.id = t1.id
  AND ISNULL(t2.date, GETDATE()) <= GetDate()
)

Demo

答案 2 :(得分:-1)

这个想法是,创建一个返回那些相同id的子查询,其中最小日期(在相同的id内)大于当前日期。我也喜欢使用外部SQL,因为只要你想将列添加到输出中,如果你不想再修饰组,就必须创建它。

SELECT id 
FROM tab
WHERE id in
  (SELECT id
  FROM tab
  GROUP BY id
  HAVING MIN(IFNULL(date, GETDATE())) > GETDATE())
GROUP BY id
相关问题