3

我有一个包含日期和 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

谢谢

4

2 回答 2

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

http://sqlfiddle.com/#!2/b128c/1

于 2013-09-10T18:41:53.987 回答
1

group by 不能使用(任何)sql 来解决问题 - 好的 mysql 可以 - 其他人不会允许这样做

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

会导致类似错误:id is not part of 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 

这只是 - 可能 - 你想要的,如果这是一个你有机会的约会(!)它会是你想要的

要获得有效的(没有数据库解释)结果集,您必须使用:

select id, some_aggregation_function(val) from table1 group by id

其中聚合是最小值,最大值左右。

是这样的:

select id, val  FROM table1 a 
where (id,val)=(select id, min(val) from table1 b where a.id=b.id)

如果你想要最低....

于 2013-09-10T19:54:41.700 回答