0

仕事で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つの列があります

Tmestamp = progressive timestamp for each min
Count = count, just a number
Latency Type = 1m, 2m or 4m

各タイムスタンプには1m、2m、および4mの遅延がありますが、これらはすべて異なる行です。

タイムスタンプである1つの行を返す必要があります。タイムスタンプで1mをカウントし、タイムスタンプで2mをカウントし、タイムスタンプで4mをカウントします。

count1m列count2m列などの代わりにデータベースを変更できません。

別の見方をすると、これら3つのクエリを1つにマージすることです。

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\')
4

1 に答える 1

1

私があなたを正しく理解していれば、これはそれを行うはずです:

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')
于 2012-04-20T18:39:31.033 に答える