2

私は長い間MySQLクエリを書いてきましたが、これに関してはまったく初心者のように感じ、このクエリを単純化する方法がわからないようです。基本的に、私はデータベースから収益のコンマ区切りリストを生成しようとしています。これは最終的にGoogleチャートにプラグインされます。私も「過去31日間」のものを作らなければならないので、これを単純化する方法を理解しない限り、私はちょっと困惑しています。

テーブルのデータベース列は...

  • 時間:注文がint()で届いたとき(UNIXタイムスタンプ形式)
  • 価格:decimal(10,2)の注文はいくらでしたか
SELECT
 CONCAT(
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (6 * 86400)) AND time > (UNIX_TIMESTAMP() - (7 * 86400))),
 ',',
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (5 * 86400)) AND time > (UNIX_TIMESTAMP() - (6 * 86400))),
 ',',
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (4 * 86400)) AND time > (UNIX_TIMESTAMP() - (5 * 86400))),
 ',',
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (3 * 86400)) AND time > (UNIX_TIMESTAMP() - (4 * 86400))),
 ',',
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - (2 * 86400)) AND time > (UNIX_TIMESTAMP() - (3 * 86400))),
 ',',
 (SELECT SUM(price) FROM orders WHERE time < (UNIX_TIMESTAMP() - 86400) AND time > (UNIX_TIMESTAMP() - (2* 86400)) ),
 ',',
 (SELECT SUM(price) FROM orders WHERE time > (UNIX_TIMESTAMP() - 86400))
 ) as chart_rev 
FROM orders_basic
LIMIT 0,1

可能であれば、このように24時間単位で必要です。

いつものように、どんな助けでも大歓迎です。ありがとう!

解決

注意:結果を注意深く見てください。結果が間違った順序で表示されている可能性があります。その場合は、並べ替えを逆にしてください。

SELECT GROUP_CONCAT(total_sum) AS sum_list FROM
(
    SELECT
        FLOOR((UNIX_TIMESTAMP() - time) / 86400) AS date,
        SUM(price) AS total_sum
    FROM
        orders_basic
    WHERE
        is_testorder < 1
          AND FROM_UNIXTIME(time) > DATE_SUB(NOW(), INTERVAL 1 WEEK)
    GROUP BY
        date
) AS s
4

1 に答える 1

3

多分このような何か?

SELECT GROUP_CONCAT(total_sum) AS sum_list FROM
(
    SELECT
        DATE(FROM_UNIXTIME(time)) AS date,
        SUM(price) AS total_sum
    FROM
        orders
    WHERE
        FROM_UNIXTIME(time) > DATE_SUB(NOW(), INTERVAL 1 MONTH)
    GROUP BY
        date
) AS s

これにより、先月の販売額のコンマ区切りのリストが表示されます。ただし、24時間単位ではなく、日付でグループ化されます(したがって、time列によると、カットオフは深夜になります)。

于 2012-07-12T13:44:15.250 に答える