MySQL - 选择当前周的最短日期,不一定是一周的第一天

时间:2012-07-15 17:06:15

标签: php mysql database

使用PHP / MySQL

我正在尝试创建一个select语句,该语句从当前周的最少一天获取数据(我用它来显示某个玩家'本周'的数据)。这周从星期日开始。星期日的数据可能并不总是存在,因此如果没有找到星期日数据,那么它将使用发现的下一个最早的星期,星期一,星期二等。

我的日期列名为'theDate',数据类型为'DATE'

查询需要类似于:

SELECT *
FROM table_name
WHERE name = '$username'
AND [...theDate = earliest day of data found for the current week week]
LIMIT 1

它会返回一行数据。

这是我试图获取“本周”数据的查询,它似乎在周日没有正常工作,它没有显示任何内容:

SELECT *
FROM table_name
WHERE playerName = '$username'
AND YEARWEEK(theDate) = YEARWEEK(CURRENT_DATE)
ORDER BY theDate;

这是我用来获取“这几个月”数据的查询,即使找不到月份数据的第一天,也会使用当前月/年中找到的最早数据日期(这个查询对我来说非常合适):<​​/ p>

SELECT *
FROM table_name
WHERE playerName =  '$username'
AND theDate >= CAST( DATE_FORMAT( NOW(),'%Y-%m-01') AS DATE)
ORDER BY theDate
LIMIT 1

3 个答案:

答案 0 :(得分:0)

不试试这个,你可能需要一个内部查询:

select * 
from table_name tn
where tn.the_date = 
(select min(the_date) 
from table_name 
where WEEKOFYEAR(the_date) = WEEKOFYEAR(CURDATE())
and YEAR(the_date) = YEAR(CURDATE()))

即,给我表中的行,其中的日期等于当前周和年中表中最早的日期。

答案 1 :(得分:0)

尝试以下操作,将YOUR_DATE替换为所需列中的日期(日期):

SELECT ADDDATE(YOUR_DATE, INTERVAL 1-DAYOFWEEK(YOUR_DATE) DAY) 
FirstDay from dual


你试过了吗?

SELECT ADDDATE(theDate , INTERVAL 1-DAYOFWEEK(theDate ) DAY) FirstDay
FROM table_name
WHERE playerName =  '$username'
ORDER BY theDate DESC
LIMIT 1

答案 2 :(得分:0)

试试这个

SELECT * FROM table_name WHERE name = '$username' 
AND your_data IS NOT NULL
AND WEEK(the_date,0 = WEEK(NOW(),0))
ORDER BY DATE_FORMAT(the_date,'%w') ASC