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()
)