0

毎日のいくつかのWebページの累積合計訪問数を記録した表があります。これらすべてのページについて、特定の日の実際の訪問数を取得したいと思います。テーブルは次のようなものです

- record_id   page_id     date     addup_number
 - 1             1        2012-9-20     2110
 - 2             2        2012-9-20     1160
 - ...          ...          ...         ...
 - n             1        2012-9-21     2543
 - n+1           2        2012-9-21     1784

フェッチしたい結果は次のようになります。

 - page_id      date        increment_num(the real visit numbers on this date)
 - 1           2012-9-21      X
 - 2           2012-9-21      X
 - ...           ...         ...
 - N           2012-9-21      X

しかし、私はこれをphpで実行したくないので、時間がかかります。SQLディレクティブまたはいくつかのmysql関数で必要なものを取得できますか?

4

3 に答える 3

1

Ok。date列で結合し、結合の片側に日を追加して、テーブル自体を結合する必要があります。

仮定:

  1. date列は正当なDATEタイプであり、文字列ではありません
  2. 毎日を各ページに計上(隙間なし)
  3. addup_number はINT何らかのタイプ ( BIGINTINTSMALLINTなど) です。
  4. table_name は、指定していない実際のテーブル名に置き換えられます
  5. 各ページで 1 日 1 レコードのみ...つまり、同じ日に複数のカウントを持つページはありません

あなたはこれを行うことができます:

SELECT t2.page_id, t2.date, t2.addup_number - t1.addup_number AS  increment_num
  FROM table_name t1
  JOIN table_name t2 ON t1.date + INTERVAL 1 DAY = t2.date
  WHERE  t1.page_id = t2.page_id

注意すべきことの 1 つは、これが巨大なテーブルでdateあり、インデックス付きの列である場合、ON句に日を追加して変換する必要があるため、結合に苦しむことになりますが、データは取得されます。

于 2012-09-28T13:39:12.507 に答える
0

更新しました:

SELECT today.page_id, today.date, (today.addup_number - yesterday.addup_number) as increment
 FROM myvisits_table today, myvisits_table yesterday
WHERE today.page_id = yesterday.page_id
    AND today.date='2012-9-21'
    AND yesterday.date='2012-9-20'
GROUP BY today.page_id, today.date, yesterday.page_id, yesterday.date
ORDER BY page_id
于 2012-09-28T13:36:58.783 に答える
0

このようなもの:

SELECT date, SUM(addup_number) 
FROM your_table 
GROUP BY date
于 2012-09-28T13:38:35.537 に答える