我刚开始在工作中学习SQL,但是我在子查询方面遇到了麻烦。我希望不仅仅是一个查询,而是一个如何创建子查询的解释。
当前SQL查询
SELECT to_char(P_DT, 'yyyy-mm-dd HH:mi:ss'), COUNT, LATENCY
FROM latency ORDER BY P_DT
返回
to_char(P_DT, 'yyyy-mm-dd HH:mi:ss'), COUNT, LATENCY
2012-04-20 03:42:00 83659 1m
2012-04-20 03:42:00 70305 2m
2012-04-20 03:42:00 105194 4m
2012-04-20 03:43:00 70277 1m
2012-04-20 03:43:00 0 2m
2012-04-20 03:43:00 0 4m
我需要的是
to_char(P_DT, 'yyyy-mm-dd HH:mi:ss'), COUNT.LATENCY='1m', COUNT.LATENCY='2m', COUNT.LATENCY='4m'
2012-04-20 03:42:00 83659 70305 105194
2012-04-20 03:43:00 70227 0 0
谢谢
数据库有3列: Timestamp、Count、Latency Type
Tmestamp = progressive timestamp for each min
Count = count, just a number
Latency Type = 1m, 2m or 4m
每个时间戳都有1m、2m和4m延迟,但这些都是不同的行。
我需要返回一行时间戳,计数为1m在时间戳,计数为2m在时间戳,计数为4m在时间戳
我不能将数据库更改为count1m列、count2m列等。
另一种看待它的方式是将这三个查询合并为一个查询
SELECT to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\'), COUNT
FROM LATENCY
WHERE SOURCE_ID=\'2\' AND LATENCY = \'1m\'
GROUP BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
ORDER BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
SELECT to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\'), COUNT
FROM LATENCY
WHERE SOURCE_ID=\'2\' AND LATENCY = \'2m\'
GROUP BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
ORDER BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
SELECT to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\'), COUNT
FROM LATENCY
WHERE SOURCE_ID=\'2\' AND LATENCY = \'4m\'
GROUP BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
ORDER BY to_char(P_DT, \'yyyy-mm-dd HH:mi:ss\')
发布于 2012-04-21 02:39:31
如果我没理解错的话,应该是这样的:
SELECT to_char(P_DT, 'yyyy-mm-dd HH:mi:ss'),
SUM(CASE WHEN LATENCY = '1m' THEN COUNT ELSE 0 END) AS LATENCY1m,
SUM(CASE WHEN LATENCY = '2m' THEN COUNT ELSE 0 END) AS LATENCY2m,
SUM(CASE WHEN LATENCY = '4m' THEN COUNT ELSE 0 END) AS LATENCY4m
FROM latency
GROUP BY to_char(P_DT, 'yyyy-mm-dd HH:mi:ss')
ORDER BY to_char(P_DT, 'yyyy-mm-dd HH:mi:ss')
https://stackoverflow.com/questions/10251609
复制相似问题