0

私は次のようなテーブルを持っています

CREATE TABLE sales
    (`id` int, `date` date, `amount` int(4))
;

insert into sales values (1, '2012-09-01', 200),
                         (2, '2012-09-01', 300),
                         (3, '2012-09-02', 400),
                         (4, '2012-09-02', 500),
                         (5, '2012-09-02', 600)

今日の売上と昨日の売上を示す行を取得したい

お気に入り

Date             Today Total sales   Yesterday Sales
2012-09-02       1500                500

次のようなものを使用してみました

SELECT id, date, sum(amount) FROM sales
GROUP BY date;

しかし、それは賢明な販売日を返します。プログラムで実行できることは理解していますが、DB から直接取得するより良い方法はありますか?

sqlfiddle

4

3 に答える 3

2
SELECT id, date(now()) as `date`, 
      SUM(IF(date(`date`) = date(now()), `amount`, 0)) as TodayTotalSales,
      SUM(IF(date(`date`) < date(now()), `amount`, 0)) as OtherDaySales
FROM sales;

http://sqlfiddle.com/#!2/0ef6a/18

于 2012-10-18T02:54:36.507 に答える
0

Idレコードごとに異なるため、それを取得しています。現在、次の 2 つのオプションがあります。

  1. Id を取得してクエリを次のように記述しないでください。

    SELECT date, sum(amount) FROM sales
    GROUP BY date;
    
  2. サブクエリで結合を使用する

    SELECT a.ID, a.date, b.amount
    FROM sales a, (SELECT date, sum(amount) amount FROM sales
                   GROUP BY date) b
    WHERE a.date = b.date;
    

    注:オプション 2 では、2 番目と 3 番目の列が 1 日以内に各 ID に対して同じ値で繰り返されます。

于 2012-10-18T02:44:15.837 に答える
0
SELECT date, sum(amount), yestersales 
FROM sales AS s1, 
    (SELECT sum(amount) as yestersales, ADDDATE(date, 1) AS yesterdate 
        FROM sales GROUP BY date) AS s2
WHERE s1.date = s2.yesterdate
GROUP BY date;

あなたが望むことはしますが、実際にはあまり効率的ではないと思います。私は個人的にコードでそれを行います。

日付でグループ化しているので、ここでは ID を選択してもあまり意味がありません。

于 2012-10-18T02:55:41.400 に答える