2016-05-23 2 views
-1

私はデータベースクエリがあまり良くありません。助けが必要です。Mysql 1日間隔で結果を取得

私はデータベーステーブルtbl_ordersを持っています。この表では、注文日時はGMTごとに格納されます。

ここでは、ユーザーがISTで日付範囲を選択するアナリティクスについて説明します。私はポストに入るだろう。

ユーザーは2011年1月4日から30/04/2016までを選択しました

今度は、各日付の合計注文額を表示したいと思います。

GMTに格納されているデータベースの日付時刻になるので、最初にISTの日付をGMT datetimeに変換してから、各日付に対してSQLクエリを実行する必要があります。

つまり、30日後に30個のSQLクエリが実行されます。

最初のクエリは、だから私はそれを知りたい2番目のクエリが.....ように

SELECT SUM(order_amount) FROM tbl_order WHERE order_date=<'2016-04-01 
18:30:00' AND orer_date>'2016-04-02 18:30:00' 

のように実行され、

SELECT SUM(order_amount) FROM tbl_order WHERE order_date=<'2016-03-31 18:30:00' 
AND orer_date>'2016-04-01 18:30:00' 

のように実行されます。 1つのクエリを実行してこの結果セットを得る方法はありますか?

+0

* 30日後に30 SQLクエリ*どのように?あなたは単一のクエリでそれを行うことができます。疑問に思ったテーブル構造とコードを追加してください。 – Sandeep

+0

私はユーザー入力がIST日付であるが、GMTに格納されたデータベースの日時があるため。したがって、ISTの日付が01/04/2016でGTMの場合は31-03-2016 18:30:00から01-04-2016 18:30:00 –

+0

'SELECT ... WHERE order_date BETWEEN '2016-03- 31 18:30:00 'AND' 2016-03-31 18:30:00'' SQLの開始日と終了日を入力し、結果をループします。おそらくdate_orderで注文したいと考えています – Dale

答えて

0

使用条件の集約:

SELECT SUM(CASE WHEN order_date >= '2016-03-31 18:30:00' AND order_date < '2016-04-01 18:30:00' 
       THEN order_amount END), 
     SUM(CASE WHEN order_date >= '2016-04-01 18:30:00' AND order_date < '2016-04-02 18:30:00' 
       THEN order_amount END) 
FROM tbl_order; 

ノート。 <=を表現する適切な方法は<=です。また、比較の順序が正しくないため、元の値はNULLになります。

+1

日付は私がダイナミックを意味するものであればどんなものでもかまいませんので、SQLクエリで述べたように使用することはできません。またあなたのアイデアごとに、私は日付ごとに1つの列を取得します。私はそれぞれの日付のために1つの行をしたいです –

+0

@HardikDesai質問だけ明確だった場合。 – Strawberry

+0

@StrawberryユーザーはISTで日付範囲を選択します。 GMTに格納されたデータベースの日付時刻。今、私は日付範囲の各日付の合計order_amountを計算したいと思います。私はPHPを使用して、ISTの日付をGMTの日時に変換しています。今私はGMTの日付範囲を持っています。しかし、2016-03-31 18:30:00から2016-04-01 18:30:00のように、日付ごとに結果を設定したい。次の行は2016-04-01 18:30:00〜2016-04-02 18:30:00 –

0

(あなたがPHPでGMTに日付を変換した場合)以下のコードを試してみて、出力があなたの要件ごとにあるかどうかを確認:

SELECT order_date,SUM(order_amount) FROM tbl_order WHERE order_date between 
'2016-03-31 00:00:00' AND '2016-04-30 00:00:00' GROUP BY order_date DESC; 

注:最初の日付がより常に小さくなければなりません2番目の日付。 GMTにIST時間を変換するためにあなたがIST時間から5.30時間を減算する必要がありますので


ISTは、5.30時間進んGMTのある、これはあなたがISTから日付を変換することを計画している場合(以下のクエリを使用して行うことができますGMT to MYSQLクエリ)

SELECT order_date,SUM(order_amount) FROM tbl_order WHERE order_date between 
convert_tz('2016-03-31 00:00:00','+00:00','-05:30') AND 
convert_tz('2016-04-30 00:00:00','+00:00','-05:30') GROUP BY order_date DESC; 
+0

しかし、各日付範囲で1行を取得する方法がわかりません。例えば2016-03-31 18:30:00〜2016-04-01 18:30:00 1行2016-04-01 18:30:00〜2016-04-02 18:30:00別の行。私の知る限り、GROUP BYは私にこの結果を提供していません。 –

+0

私は30日の範囲を選択している場合、私はあなたの考えとして30クエリを実行する必要があります。私は単一のクエリで結果をしたい。 –

+0

@HardikDesaiあなたは1日のために行った範囲に従って日付を置き換える必要があります。更新された回答を参照してください。 – Sandeep

関連する問題