2014-10-27 94 views
2

我有,我认为通常情况下的变化获取记录与日期时间分组的最高值每小时

Get records with highest/smallest <whatever> per group

描述这与数据表

id | value1 | value2 | curdate | curtime 
1 | 234 | 500 | 2014-10-27 | 12:00:00 
2 | 200 | 400 | 2014-10-27 | 12:05:00 
3 | 300 | 600 | 2014-10-27 | 12:10:00 
4 | 400 | 800 | 2014-10-27 | 12:15:00 
5 | 150 | 700 | 2014-10-27 | 12:20:00 
... 
10 | 134 | 530 | 2014-10-27 | 13:00:00 
12 | 220 | 420 | 2014-10-27 | 13:05:00 
13 | 330 | 630 | 2014-10-27 | 13:10:00 
14 | 440 | 840 | 2014-10-27 | 13:15:00 
15 | 120 | 750 | 2014-10-27 | 13:20:00 

我想报告的最大值2和相应的值1:

value1 | value2 | curdate | curtime 
    400 | 800 | 2014-10-27 | 12:00:00 
    440 | 840 | 2014-10-27 | 13:00:00 

我试图应用上面答案中指定的“标准”解决方案,但没有成功。使用MySQL。

SELECT t1.* 
FROM Table AS t1 
LEFT OUTER JOIN `Table` AS t2 
ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField 
WHERE t2.GroupId IS NULL 

我想是这样的:

SELECT t1.* 
FROM Table AS t1 
LEFT OUTER JOIN Table AS t2 
ON SUBSTR(CONCAT(t1.curdate, ' ', t1.curtime), 1, 13) = SUBSTR(CONCAT(t2.curdate, ' ', t2.curtime), 1, 13) AND t1.value2 < t2.value2 
WHERE ???? IS NULL <--- not sure what to put here 

请帮助。谢谢。

回答

1

的样本数据:

CREATE TABLE t 
    (`id` int, `value1` int, `value2` int, `curdate` date, `curtime` time) 
; 

INSERT INTO t 
    (`id`, `value1`, `value2`, `curdate`, `curtime`) 
VALUES 
    (1, 234, 500, '2014-10-27', '12:00:00'), 
    (2, 200, 400, '2014-10-27', '12:05:00'), 
    (3, 300, 600, '2014-10-27', '12:10:00'), 
    (4, 400, 800, '2014-10-27', '12:15:00'), 
    (5, 150, 700, '2014-10-27', '12:20:00'), 
    (10, 134, 530, '2014-10-27', '13:00:00'), 
    (12, 220, 420, '2014-10-27', '13:05:00'), 
    (13, 330, 630, '2014-10-27', '13:10:00'), 
    (14, 440, 840, '2014-10-27', '13:15:00'), 
    (15, 120, 750, '2014-10-27', '13:20:00') 
; 

查询:

SELECT t.* 
FROM t 
INNER JOIN (
    SELECT 
    DATE_FORMAT(CONCAT(curdate, ' ', curtime), '%Y-%m-%d %h') AS datehour, 
    MAX(value2) as maxv2 
    FROM 
    t 
    GROUP BY datehour 
) sq ON t.value2 = sq.maxv2 AND DATE_FORMAT(CONCAT(t.curdate, ' ', t.curtime), '%Y-%m-%d %h') = sq.datehour; 

结果:

+------+--------+--------+------------+----------+ 
| id | value1 | value2 | curdate | curtime | 
+------+--------+--------+------------+----------+ 
| 4 | 400 | 800 | 2014-10-27 | 12:15:00 | 
| 14 | 440 | 840 | 2014-10-27 | 13:15:00 | 
+------+--------+--------+------------+----------+ 
+0

辉煌的感谢!不知道我为什么困惑。 需要更改%H中的%h。 – murenaj77 2014-10-27 16:38:36