2014-10-27 108 views
0

我用一周的功能,像这样:显示周开始日期与星期()

SELECT 
    sub.id AS ARID, 
    WEEK(my.data) AS Week, 

是否可以添加一周的开始日期,该星期对应?

喜欢的东西:

SELECT 
    sub.id AS ARID, 
    WEEK(my.data) AS Week, 
    MIN(my.data) AS WKBeginning 

以这种方式使用MIN我删除了大量的数据无意中 - 它应该fromt他数据,即使离婚。换句话说,我想显示周作为日期,而不是一个数字,沿线'周一 - 2014-09-04'

这可能吗?

+1

我的答案在某些情况下是不正确的,我用更好的(和正确的)解决方案更新了它。 – jpw 2014-10-27 20:07:21

回答

1

如果源表中没有包含本周的所有日期范围(特别是一周的第一天),那么我的第一个答案是不正确的。

正确的方法是使用ADDDATE()

ADDDATE(my.data, INTERVAL 1-DAYOFWEEK(my.data) DAY) AS CorrectWKBeginning, 

一个相关子查询应该工作时,不包含在数据一周的第一天:

SELECT 
    id, 
    WEEK(d) AS Week, 
    ADDDATE(d, INTERVAL 1-DAYOFWEEK(d) DAY) AS CorrectWKBeginning, 
    (SELECT MIN(d) FROM t WHERE WEEK(d) = WEEK(t2.d)) as IncorrectWKBeginning 
FROM t t2 

Sample SQL Fiddle

您可能必须使用带参数的week()来设置星期的开始日期,并且如果从0-53或1-53开始计数,请参阅MySQL manual for reference

+0

非常感谢第二个答案让我的头脑更加简单 – 2014-10-27 20:12:04

相关问题