我有一个有date和id列的表。如何选择7天间隔的ID?
我的数据是:
date id
2013-07-01 11
2013-07-02 22
2013-07-03 33
2013-07-04 33
2013-07-05 44
2013-07-06 44
2013-07-07 45
2013-07-08 46
2013-07-09 47
2013-07-10 48
2013-07-11 48
2013-07-12 49
2013-07-13 50
2013-07-14 51
2013-07-15 52
2013-07-16 52
2013-07-17 53
2013-07-18 53
2013-07-19 54
我想要的是:
date id
2013-07-01 11
2013-07-08 46
2013-07-15 52
由于
答案 0 :(得分:4)
SELECT date,id FROM table1 GROUP BY WEEK(`date`, 1)
答案 1 :(得分:1)
该组没有用(任何)sql做的技巧 - 确定mysql没做 - 其他人不会允许这个
SELECT date,id FROM table1 GROUP BY WEEK(`date`, 1)
会导致类似错误:id不属于group by ....
如果按col1而不是col2分组,则数据库不知道col2的值。
MySql似乎假设“如果我没有被其他人分组,那么采取最小或首先的数据库顺序”
如果 - 并且仅当 - 你想要第一个(!)结果 - 或MySql决定用于你缺少的第二个分组元素,你没问题。
说明:
假设:
CREATE TABLE table1
(`id` int, `val` int );
INSERT INTO table1
(`id`, `val`)
VALUES
(1,99), --'!!!!'
(1,2),
(1,3),
(1,4),
(1,2),
(2,1),
(1,1),
(2,2),
(3,1),
(4,1)
;
请参阅 - 请,有6行'id'= 1,其中两行ID为'2'其他独特
select id, val FROM table1 GROUP BY id
评估为:
ID VAL
1 99
2 1
3 1
4 1
这只是 - 可能 - 你想要什么,如果是约会,你有机会(!)它就是你想要的
要获得有效(没有数据库intepret)结果集,您将不得不使用:
select id, some_aggregation_function(val) from table1 group by id
聚合为min,max左右。
有点像:
select id, val FROM table1 a
where (id,val)=(select id, min(val) from table1 b where a.id=b.id)
如果你想要最低......