0

現在、1 つのテーブルと 2 つの入れ子になった選択があり、2 つの入れ子になった選択を結合したいのですが、結果セットに、結果セットごとに 1 つずつ (入れ子になった選択ごとに 1 つの列) 2 つの異なる列を表示したいと考えています。IE 3 列合計 t_stamp、R02AO11、R03AO11。私はこれについて数日間頭を悩ませてきました。助けてくれる人なら誰でも大歓迎です。この例 Using SELECT UNION and return output of two columns from one tableを見つけましたが、私には意味がありません-おそらく少し頭を悩ませています。再投稿が多すぎないことを願っています。再度、感謝します。=)

Select t_stamp,
MIN(R02AO11) 
FROM
( 
SELECT 
    t_stamp,
    R02AO11
FROM 
    tag_history 
WHERE 
    from_unixtime(floor(unix_timestamp(t_stamp)/60)*60) BETWEEN '2012-11-01                                                                                          00:00:00' AND '2012-11-30 23:59:59' 
    AND (R02AO11 IS NOT NULL AND R02AO11 > 0) 
) AS min_tag_history
GROUP BY LEFT(t_stamp, 10)
UNION ## UNION ALL 
Select t_stamp, 
MIN(R03AO11) 
FROM
( 
SELECT 
    t_stamp,
    R03AO11
FROM 
    tag_history 
WHERE 
    from_unixtime(floor(unix_timestamp(t_stamp)/60)*60) BETWEEN '2012-11-01 00:00:00' AND '2012-11-30 23:59:59' 
    AND (R03AO11 IS NOT NULL AND R03AO11 > 0) 
) AS min_tag_history
GROUP BY LEFT(t_stamp, 10)
ORDER BY t_stamp
4

1 に答える 1

0

あなたはこれを考えすぎていますか、それとも私は何かを見逃していますか?

SELECT 
    t_stamp,
    MIN(CASE WHEN R02AO11 = 0 THEN NULL ELSE R02AO11 END),
    MIN(CASE WHEN R03A011 = 0 THEN NULL ELSE R03A011 END)
FROM 
    tag_history 
WHERE 
    from_unixtime(floor(unix_timestamp(t_stamp)/60)*60) BETWEEN '2012-11-01                                                                                          00:00:00' AND '2012-11-30 23:59:59' 
GROUP BY LEFT(t_stamp, 10)
于 2012-12-14T00:02:58.897 に答える