2016-07-26 15 views
1

私の質問には非常にばかげた解決策があることを願っていますが、私は立ち往生しています。MySQL今日の結果を選択していない過去30日間を選択してください

私は過去30日間の注文を日付でグループ化するこのクエリを持っています。

SELECT 
    DATE_FORMAT(order_date, '%Y-%m-%d') as day, 
    COUNT(*) AS num 
FROM 
    orders 
WHERE 
    (order_date >= CURDATE() - INTERVAL 30 DAY) 
GROUP BY 
    DAY(order_date) 

このクエリには、昨日までの結果のみが含まれますが、今日のものは含まれません。私は間違って何をしていますか?

役立ち情報:

  • order_dateDATETIMEフォーマットを有します。
  • 私はチェックしており、データベースには今日の日付の注文があります。
  • CURDATE()NOWに変更しようとしましたが、BETWEENを使用しても問題ありません。

    SELECT 
        DATE_FORMAT(order_date, '%Y-%m-%d') as day, 
        COUNT(*) AS num 
    FROM 
        orders 
    WHERE 
        (order_date >= CURDATE() - INTERVAL 30 DAY) 
    GROUP BY day; 
    

    注:あなたがDAY(date)によってグループ化されたクエリで

+0

正確に何が出力されるべきですか? –

答えて

3

はこれを試してみてください。 Day関数は、月の曜日を返します。したがって、2カ月間の同じ日が1つのスロットに集約されている可能性があります。だからこそあなたは今日のという結果がありませんでした。

+1

いいえ、このクエリは少なくとも別の問題を修正します。 –

+0

魅力的な作品。そして、本当に有益なメモに感謝します。 11分で私はあなたの答えを受け入れるでしょう(それは今私には許されません) – Mumpo

+0

あなたが間隔を60日増やすと、あなたはそれをはっきり理解できます。あなたは結果セットに31以上のレコードを取得しないでしょう@Mumpo – 1000111

0

これを試してください。

SELECT         
    DATE_FORMAT(order_date, '%Y-%m-%d') as day,         
    COUNT(*) AS num         
FROM         
    orders         
WHERE         
    DATE_FORMAT(order_date, '%Y-%m-%d') >= adddate(CURDATE() - INTERVAL 30 DAY)         
GROUP BY         
    DAY(order_date); 

これが役立ちます。

関連する問題