我有一个基本问题:我尝试在SQL中创建一个查询:
Select Date, Status From Table
我的结果是,例如,
2016-06-07 FAILED
2016-06-07 FINISH OK
2016-07-07 FINISH OK
2016-07-07 FINISH OK
是否可以判断状态是否为“FAILED'从2016-06-07,只打印一行失败状态。如果它刚刚完成,打印完成就可以了。 我想要这个结果:
2016-06-07 FAILED
2016-07-07 FINISH OK
谢谢,
编辑: 我只有2个状态:FAILED和FINISH OK
越来越多的日期和结果:
2016-06-07 FAILED
2016-06-07 FINISH OK
2016-06-07 FINISH OK
2016-06-07 FINISH OK
2016-06-07 FINISH OK
2016-07-07 FINISH OK
2016-07-07 FINISH OK
2016-07-07 FINISH OK
2016-07-07 FINISH OK
2016-07-07 FINISH OK
2016-07-08 FINISH OK
2016-07-08 FINISH OK
2016-07-08 FINISH OK
2016-07-08 FAILED
2016-07-08 FINISH OK
我想:
2016-06-07 FAILED
2016-07-07 FINISH OK
2016-07-08 FAILED
如果我在某个日期有一个失败状态,我想打印“失败”,但如果我没有任何“失败”状态。状态,我打印'完成确定',它更好吗?
答案 0 :(得分:5)
使用CASE
条件聚合。
第一个COUNT
只是为了向您展示如何工作。这将计算每个日期组的失败次数。
然后以下CASE
检查是否有1个或更多失败
SELECT Date,
COUNT(CASE WHEN Status = 'FAILED' THEN 1 END) as total_fails,
CASE WHEN Count(CASE WHEN Status = 'FAILED' THEN 1 END) > 0
THEN 'FAILED'
ELSE 'FINISH OK'
END as Status
FROM Table
GROUP BY Date
答案 1 :(得分:4)
这应该有效:
Select Date, MIN(Status)
From Table
Group By Date
答案 2 :(得分:3)
你可以使用TOP 1 WITH TIES和ROW_NUMBER:
SELECT TOP 1 WITH TIES
[Date],
[Status]
From [Table]
ORDER BY ROW_NUMBER() OVER (PARTITION BY [Date] ORDER BY [Status] ASC)
输出:
Date Status
2016-06-07 FAILED
2016-07-07 FINISH OK
2016-07-08 FAILED
答案 3 :(得分:1)
虽然我使用与上面相同的方法,但我认为使用COUNT DISTINCT可以更简单,如下所示:
SELECT date,
CASE WHEN COUNT( DISTINCT status)>1
THEN 'FAILED'
ELSE 'FINISH OK'
END AS status
FROM table
GROUP BY date
答案 4 :(得分:-1)
您想按日期或状态进行分组吗?
SELECT Date, Status FROM Table GROUP BY Status
或
BleGattException
如果您有分组,则还可以获得一些摘要信息。你能解释一下吗?