0

私は 2 つの同一のテーブル (_impressionsdaily、_impressionsalltime) を持っています。毎日の終わりに、すべてのデータを日次から全時間に移動します。構造は、ID、購入 ID、インプレッション、ユニーク、日付です。

次のクエリを実行します。

SELECT  
    daily.purchaseID,
    SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
    SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
    FROM _impressionsdaily daily
    LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
    GROUP BY daily.purchaseID;

問題は、alltime テーブルに、日次で利用できない購入がある場合、それらが表示されないことです。

基本的には、毎日と全期間のすべてのインプレッションを合計するという考え方です。

---編集 毎日午前 12:00 に、毎日のテーブルが全時間にコピーされてから削除されます。したがって、与えられた解決策は間違っています..

助けてくれてありがとう、ダニー

4

2 に答える 2

1

Union Selectを探していると思います。次のようなことを試してください:

SELECT DISTINCT(p.ID), p.purchaseID
FROM (SELECT *
      FROM _impressionsdaily
      UNION SELECT *
      FROM _impressionsalltime) AS p
GROUP BY p.purchaseID
于 2013-03-04T17:28:04.257 に答える
0
SELECT  
daily.purchaseID,
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
FROM _impressionsdaily daily
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
GROUP BY daily.purchaseID;

この場合、_impressionsalltimeテーブルからフィールドを選択していません。

このSQLを使用して、_impressionsalltimeテーブルからフィールドを選択することもできます

SELECT  
alltime.*,
daily.purchaseID,
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
FROM _impressionsdaily daily
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
GROUP BY daily.purchaseID;
于 2013-03-04T17:34:57.563 に答える