0

私はこれをしばらく試しましたが、成功しませんでした。

私のデータベースはこのようなものです

-----------------------------------------------------
DEVICE_HASH | DEVICE_NAME | DEVICE_VERISON | DATE
-----------------------------------------------------
122138223823| crespo      | 1.1            | 12/01/13
122138213823| jewell      | 1.2            | 12/01/13
122138223823| crespo      | 1.1            | 13/01/13
122138263823| crespo      | 1.1            | 13/01/13
122138283823| blade       | 1.2            | 13/01/13
122138293823| crespo      | 1.1            | 14/01/13
-----------------------------------------------------

1 日あたりにダウンロードされたデバイスの数を取得するために、以下のクエリを実行しましたが、うまくいきました。

SELECT DATE_FORMAT(DATE, '%Y-%m-%d') as 'date', DEVICE_NAME as 'device' ,COUNT(*) as 'count' FROM table_name GROUP BY DATE_FORMAT(DATE, '%Y-%m-%d'), DEVICE_NAME

例: 12/01/13 に 1、13/01/13 に 2、14/01/13 に 1 の crespo カウントを取得しました。

ここで、実行中のデバイスの数を取得したいと考えています。つまり、前日の値を当日のダウンロードに追加し、最後まで続けます。

例: crespo カウントは、12/01/13 では 1、13/01/13 では 3、14/01/13 では 4 となります。

これは mysql で可能ですか?

4

2 に答える 2

1

これがあなたが探しているものだと思います:

SELECT
  @runningTotal:=IF(@prevDevice=Device_Name,@runningTotal+cnt,cnt) rt,
  dt, Device_Name, cnt,
  @prevDevice:=Device_Name
FROM (
  SELECT 
    DATE_FORMAT(DATE, '%Y-%m-%d') as dt, 
    DEVICE_NAME ,
    COUNT(*) as cnt
  FROM table_name 
  GROUP BY DATE_FORMAT(DATE, '%Y-%m-%d'), DEVICE_NAME
  ORDER BY DEVICE_NAME, 2
) t
  JOIN (SELECT @runningTotal:=0) r

サンプルのフィドル: http://sqlfiddle.com/#!2/e3525/1

これにより、次の結果が生成されます。

RT  DT          DEVICE_NAME     CNT 
1   2013-01-13  blade           1   
1   2014-01-13  crespo          1   
3   2013-01-13  crespo          2   
4   2012-01-13  crespo          1   
1   2012-01-13  jewell          1   
于 2013-02-19T04:55:33.463 に答える
0

これを試し てください。カウントをチェックするために追加の変数
が必要です。

フィドルの例

于 2013-02-19T04:48:27.060 に答える