选择数据间隔

时间:2013-09-10 18:38:42

标签: mysql sql

我有一个有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

由于

2 个答案:

答案 0 :(得分:4)

SELECT date,id FROM table1 GROUP BY WEEK(`date`, 1)

http://sqlfiddle.com/#!2/b128c/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)

如果你想要最低......