我有一个包含4列的数据库表,用于存储“页面”在我的应用程序中经历的不同状态的条目:
Id | PageId | State | TimeStamp
Id
是唯一的,PageId
是页面唯一的GUID,State
是以下四种之一:
QUEUED
REQUESTED
PUBLISHED
COMMITTED
和TimeStamp
是datetime
在成功条件下,每个PageId
数据库中有四个条目:按照上面的顺序,每个条目对应一个状态。
我想写一个查询,它会给我所有没有COMMITTED状态的页面。我正在使用SQL Server。我不确定如何编写查询。提前谢谢。
答案 0 :(得分:4)
如果你想要那些PageId
的每一行:
SELECT *
FROM dbo.YourTable A
WHERE NOT EXISTS (SELECT 1 FROM dbo.YourTable
WHERE PageId = A.PageId
AND [State] = 'COMMITTED')
如果您只想要PageId:
SELECT DISTINCT A.PageId
FROM dbo.YourTable A
WHERE NOT EXISTS (SELECT 1 FROM dbo.YourTable
WHERE PageId = A.PageId
AND [State] = 'COMMITTED')
答案 1 :(得分:2)
另一种可能性
SELECT PageId
FROM YourTable
GROUP BY PageId
HAVING Count(CASE
WHEN State = 'Committed' THEN 1
END) = 0