MySql选择过去一天内两行之间的最大差异
我有一张这样的桌子MySql选择过去一天内两行之间的最大差异,mysql,Mysql,我有一张这样的桌子 id | name | c1 | c2 | c3 | c4 | time ------------------------------------------------- 1 | miley | 23 | 11 | 21 | 18 | 2013-01-13 20:26:25 2 | john | 31 | 29 | 23 | 27 | 2013-01-14 20:26:25 3 | steve
id | name | c1 | c2 | c3 | c4 | time
-------------------------------------------------
1 | miley | 23 | 11 | 21 | 18 | 2013-01-13 20:26:25
2 | john | 31 | 29 | 23 | 27 | 2013-01-14 20:26:25
3 | steve | 44 | 31 | 33 | 35 | 2013-01-14 20:26:25
4 | miley | 34 | 44 | 47 | 48 | 2013-01-15 08:26:25
5 | john | 27 | 53 | 49 | 52 | 2013-01-15 08:26:25
6 | steve | 27 | 62 | 50 | 64 | 2013-01-16 08:26:25
7 | miley | 44 | 54 | 57 | 87 | 2013-01-16 20:26:25
8 | john | 37 | 93 | 59 | 62 | 2013-01-17 20:26:25
9 | steve | 85 | 71 | 87 | 74 | 2013-01-17 20:26:25
...etc
*注意:这是一个随机表,我只是为了让你知道我的表是什么样子
我需要知道在特定的日期范围内,在特定的栏目中谁的变化最大。我尝试了一系列不同的查询,但都无法找到一个。我认为我最接近的解决方案是
SELECT table1.name, MAX(table1.c1-h.c1) as maxDiff
FROM table_a as table1
LEFT JOIN table_a as table2
ON table2.name=table1.name AND table1.c1>table2.c1
WHERE table2.c1 IS NOT NULL
我做错了什么?为了清楚起见,我希望能够选择一个日期范围,然后在确定的列中确定该日期范围的最大差异。还要注意的是,数据只会随着时间的推移而增加,因此任何一天的第一次捕获总是,听起来您需要一个嵌套查询。首先,查询每个人在日期范围内各自的测量值,然后按最大值排序并取前1。。。像这样的东西可能适合你
select
PreGroupByName.`Name`,
PreGroupByName.MaxC1 - PreGroupByName.MinC1 as MaxSpread
from
( select
t1.`Name`,
min( t1.c1 ) as MinC1,
max( t1.c1 ) as MaxC1
from
table_a t1
where
t1.`time` between '2013-01-01' and '2013-01-17' -- or whatever date/time range
group by
t1.`Name` ) as PreGroupByName
order by
MaxSpread DESC
limit 1
您想要的输出是什么?我需要在特定日期范围内差异最大的人的姓名及其总差异
SELECT
`id`,`name`
,MAX(`c1`)-MIN(`c1`) AS `diff_c1`
-- ,MAX(`c2`)-MIN(`c2`) AS `diff_c2`
-- ,MAX(`c3`)-MIN(`c3`) AS `diff_c3`
-- ,MAX(`c4`)-MIN(`c4`) AS `diff_c4`
FROM `the_table`
WHERE `time` BETWEEN '2013-01-13 20:26:25' AND '2013-01-17 20:26:25'
GROUP BY `name`
ORDER BY `diff_c1` DESC -- whichever you want to evaluate
LIMIT 1