1

私はテーブルを持っています:apns_devices列:estado, modified, pid, etc. 最終更新時刻、つまり先週、先月、昨日、今日、および合計に基づいて統計を取得したいと考えています。現在、次のような期間ごとに 1 つのクエリ (ネスト) を実行しています。

SELECT t1.estado, t1.siempre, t2.hoy
FROM 
(SELECT *, COUNT(pid) as siempre FROM `apns_devices` GROUP BY estado) as t1
INNER JOIN 
(SELECT *, COUNT(pid) as hoy   FROM `apns_devices` WHERE DATE (modified) = CURRENT_DATE GROUP BY estado) as t2 
ON t1.estado = t2.estado

これは今日の合計です

スクリプトを高速化するために; ¿1 つのクエリでこれを行うにはどうすればよいですか?

4

2 に答える 2

2
SELECT
  estado,
  COUNT(*) siempre,
  COUNT(CASE WHEN DATE(modified) = CURDATE() THEN 1 END) AS ModifiedToday,
  COUNT(CASE WHEN DATEDIFF(CURDATE(), modified) = 1 THEN 1 END) AS ModifiedYesterday,
  COUNT(CASE WHEN DATEDIFF(CURDATE(), modified) BETWEEN 2 AND 7 THEN 1 END) AS ModifiedLastWeek,
  COUNT(CASE WHEN DATEDIFF(CURDATE(), modified) BETWEEN 8 AND 30 THEN 1 END) AS ModifiedYesterMonth
FROM
  apns_devices
GROUP BY
  estado

ここでフィドルを参照してください。

于 2013-03-11T21:59:37.927 に答える
1

このクエリを試してください

    SELECT distinct estado,  
(SELECT COUNT(pid) as hoy   FROM `apns_devices` WHERE estado = a.estado and DATE (modified) = CURRENT_DATE) AS ModifiedToday, 
(SELECT COUNT(pid) as hoy   FROM `apns_devices` WHERE estado = a.estado and CURRENT_DATE - DATE (modified) = 1) AS ModifiedYesterday, 
(SELECT COUNT(pid) as hoy   FROM `apns_devices` WHERE estado = a.estado and CURRENT_DATE - DATE (modified) BETWEEN 2 AND 8) AS ModifiedLastWeek, 
(SELECT COUNT(pid) as hoy   FROM `apns_devices` WHERE estado = a.estado and CURRENT_DATE - DATE (modified) BETWEEN 9 AND 30) AS ModifiedLastMonth 
FROM apns_devices a
于 2013-03-11T21:46:21.750 に答える