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

Sql server MSSQL-如果此ID的所有行的条件有效,则检索ID,sql-server,select,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 ║ ║

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

╔══════╦═════════════╗
║ 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 ║
╚════╝
谢谢

试试这个:

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

请看一个关于

的工作示例,其思想是创建一个子查询,返回那些相同的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

所以你想找到所有的ID,所有的日期都在未来?我将使用不存在的:


你试过先用谷歌搜索吗?在你回答后,我编辑了一点我的问题,但你的答案很好。谢谢没问题,如果您想进行更多更改,请发表评论:-
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()
)