我尝试运行以下查询:
SELECT DISTINCT person_pin AS Pin, att_date AS DailyDate,
(SELECT MAX(att_time) FROM dbo.att_transaction WHERE att_state = 0 GROUP BY person_pin)
AS MaxTime,
(SELECT MIN(att_time) FROM dbo.att_transaction WHERE att_state = 1 GROUP BY person_pin)
AS MinTime
FROM dbo.att_transaction
WHERE att_verify IN (4, 15)
我收到以下错误:
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
当我不带以下查询运行查询:GROUP BY person_pin时,它运行无误,但得到以下结果:
它获取整个列的最小值或最大值。
我需要它来获取每天每位用户的最小值和最大值。
但是,最小值只能从att_state为0的行中获取,而att_state为1的行中可以获取最大值。
我要查询的表如下所示:
id person_pin att_date att_time att_state
---|-----------|------------|------------|---------
1 | 123 | 2018-09-18 | 15:11:03 | 1
2 | 123 | 2018-09-18 | 10:05:32 | 0
5 | 234 | 2018-09-24 | 14:05:16 | 1
3 | 234 | 2018-09-24 | 13:05:55 | 1
4 | 123 | 2018-09-24 | 12:10:42 | 0
6 | 123 | 2018-09-24 | 12:15:35 | 0
7 | 234 | 2018-09-24 | 12:05:32 | 1
8 | 123 | 2018-09-24 | 10:05:33 | 1
我也尝试过:
SELECT DISTINCT tt.person_pin AS Pin, tt.att_date AS DailyDate
FROM dbo.att_transaction tt
INNER JOIN
(SELECT person_pin,
(SELECT MAX(att_time) FROM dbo.att_transaction WHERE att_state = 0 GROUP BY person_pin)
AS MaxTime,
(SELECT MIN(att_time) FROM dbo.att_transaction WHERE att_state = 1 GROUP BY person_pin)
AS MinTime
FROM dbo.att_transaction
GROUP BY person_pin) groupedtt
ON tt.person_pin = groupedtt.person_pin
但它只会返回:
我需要它返回每个用户每天的最小和最大时间。但是,最短时间只能从att_state为0的行中获取,而最大时间只能从att_state为1的行中获取
需要帮助;
您可以尝试使用条件汇总函数来实现。
SELECT MIN(CASE WHEN att_state = 1 then att_time end) MaxTime,
MAX(CASE WHEN att_state = 0 then att_time end) MinTime,
person_pin,
att_date
FROM dbo.att_transaction
WHERE t2.att_verify IN (4, 15)
GROUP BY person_pin,
att_date
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句