我有一个包含日期、id 和值的表,每个日期大约有 1000 个 id 行。我需要按日期计算每行的百分位数。我将以下代码用于单个日期的百分位排名,但是对于超过 10 年的每日数据,按日期运行的效率非常低。似乎它应该能够在 MySQL 中制定,但我无法使其工作。
Date ID Value
date1 01 -7.2
date1 02 0.6
date2 01 1.2
date2 02 3.8
SELECT c.id, c.value, ROUND( (
(@rank - rank) / @rank ) *100, 2) AS rank
FROM (
SELECT * , @prev := @curr , @curr := a.value,
@nxtRnk := @nxtRnk + 1,
@rank := IF( @prev = @curr , @rank , @nxtRnk ) AS rank
FROM (
SELECT id, value
FROM temp
WHERE date = '2013-06-28'
) AS a, (
SELECT @curr := NULL , @prev := NULL , @rank :=0, @nxtRnk :=0
) AS b
ORDER BY value DESC
) AS c
所以基本上我想选择 DISTINCT(date),然后为每个日期执行上面的 SELECT,在 INSERT INTO table2(...) 之前将结果写入 table2。
谢谢你的帮助,休