只是一个简单的问题。我有这样的表:
╔══════╦═════════════╗
║ 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 ║
╚════╝
谢谢!
答案 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()
)
答案 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