0

アクティブなユーザーの総数を毎日テーブルに書き込む cron スクリプトがあります。各月の「最高水準点」を表示する簡単なレポートを生成しようとしています。一部のアカウントはその月中に期限切れになるため、最大数が月末ではない可能性があります。

これが私のテーブル構造のサンプルです

tblUserLog
-----------
record_id   INT(11)   // PRIMARY KEY
run_date    DATE      // DATE RUN
ttl_count   INT(11)   // TOTAL FOR DAY

サンプルデータ:

record_id      run_date      ttl_count
1              2013-06-01    500
2              2013-06-10    510
3              2013-06-20    520
4              2013-06-30    515
5              2013-07-01    525
6              2013-07-10    530
7              2013-07-20    540
8              2013-07-31    550
9              2013-08-01    560

私が返したいのは:

record_id   run_date        ttl_count
3           2013-06-20      520
8           2013-07-31      550
9           2013-08-01      560

近い2つのクエリを試しました...

// This will give me the total for the first of the month
SELECT s.record_id, s.run_date, s.ttl_count
FROM tblStatsIndividual s
JOIN (
    SELECT record_id
    FROM tblStatsIndividual
    GROUP BY DATE_FORMAT(run_date, '%Y %m')
    HAVING MAX(ttl_count)
) s2
ON s2.record_id = s.record_id
ORDER BY run_date DESC

これは、record_id と合計の正しい日付とともに、各月の最初の合計を返します。

これを試した...

SELECT record_id,max(run_date), max(ttl)
FROM (
    SELECT record_id,run_date, max(ttl_count) AS ttl
    FROM tblStatsIndividual
    GROUP BY DATE_FORMAT(run_date, '%Y %m')
) a 
GROUP BY DATE_FORMAT(run_date, '%Y %m')
ORDER BY run_date DESC

これは正しい「最高水準点」を取得しているように見えますが、最高水準点である行の record_id または run_date を返しません。

最高合計の record_id と run_date を取得するにはどうすればよいですか?

4

2 に答える 2

0

@Tony Hopkinson からのヘルプに基づいて、このクエリは情報を取得します。1 つの注意点は、MAX 合計が最初に発生した ID と日付が表示されるため、合計が同じ月に 3 日連続である場合は、最初の日の ID が返されることです。私の目的では、最後の ID の方が理想的ですが、これで問題ありません。

SELECT s.Record_ID, s.Run_Date, s.ttl_Count
FROM tblStatsIndividual s
INNER JOIN (
    SELECT YEAR(run_date) AS yr, MONTH(run_date) AS mon, MAX(ttl_count) AS ttl
    FROM tblStatsIndividual
    GROUP BY DATE_FORMAT(run_date, '%Y %m')
 ) maximums
 ON maximums.yr = YEAR(s.run_date) 
    AND maximums.mon = MONTH(s.run_date) 
    AND maximums.ttl = s.ttl_Count
GROUP BY ttl_count
ORDER BY run_date DESC
于 2013-08-13T16:27:43.087 に答える