2016-06-24 3 views
0

もう一度立ち往生しました! 次のクエリを使用して、顧客の結果セットといくつかの日付を選択します。1日ごとにグループ化されていますが、1つの結果は16:00未満の時間に設定され、1つは16:00以上の時間に設定されます

SELECT 
    COUNT(DISTINCT CASE `saved` WHEN 0 THEN `cust` ELSE NULL END) AS test, 
    COUNT(DISTINCT CASE `saved` WHEN 1 THEN `cust` ELSE NULL END) AS test2, 
    DATE(`date`) AS dateday 
FROM `salg_test` 
WHERE `is_void` = 0 
GROUP BY dateday 
ORDER BY dateday DESC 

これは合計として見ることができます。今度は、次の条件に基づいてこのクエリを分離したいと思います。時間は16:00未満または16:00を超えています。私PHPmyadminを使用して、日付フィールドは24時間のcurrent_timestamp形式です。問題は、私はまだDATEにグループ化され、current_timestampではなくグループ化される必要があるということです。可能であれば、私はPHPを使用するのではなく、私のSQLクエリを励ましたいと思いますが、私はwhileループを持つテーブルにクエリをエコーし​​ます。任意のヒント?

ご協力いただきありがとうございます。

+0

'phpmyadmin'はデータベースではありません。これはmysql dbサーバの管理ツールです。それはあなたが車を運転するためにハンドルを使用していると言っているのが好きです。 –

+1

と 'group by'は任意の式を持つこともできます。 'グループ時間(日付)<16' –

答えて

0

次の文の行に沿って選択クエリに別の項目を追加しようとしましたか?

IF(DATE_FORMAT(dateday, '%H') < 16,0,1) AS afterfourpm 

その16

上記するとあなたはおそらく一種でそのできればその16未満と1場合ステートメントがdateday列に24時間形式で時間を取得し、0の結果を生成する必要があります値?私はそれが理にかなって願っていたデータベースを持たずに、それはこれをテストするのは難しいが、それは少し

SELECT COUNT(DISTINCT 
CASE `saved` 
WHEN 0 
THEN `cust` 
ELSE NULL 
END) AS test, COUNT(DISTINCT 
CASE `saved` 
WHEN 1 
THEN `cust` 
ELSE NULL 
END) AS winback, DATE(`date`) AS test1, 
IF(DATE_FORMAT(dateday, '%H') < 16,0,1) AS afterfourpm 
FROM `salg_test` 
WHERE `is_void` =0 
GROUP BY dateday 
ORDER BY dateday DESC, afterfourpm DESC 

のように見えると思います。

+0

あなたの助けてくれてありがとう!まだそれを理解していない、私は午前中に明確な頭で私のコードを再訪する必要があると思う:)私はそれを解決するときに更新されます。 –

0

グループ化するSQLに別のcase文を記述する必要があります。例えば

Case when timestamp <= 16:00 then 'Y' else 'N' end as time_flag 

また、その上のグループであり、それはあなたが欲しいの出力を取得する必要があります。

関連する問題