MySQL上个月的最后一个星期五

Nic*_*ssu 2 mysql

你好.如何使用mysql获取当月最后一个星期五的日期?

提前致谢.

编辑.嗨Stefan.这就是我所做的

set @ldom = dayofweek(last_day(curdate()));
select 
case
when @ldom = 7 then last_day(curdate()) - interval 1 day
when @ldom = 6 then last_day(curdate())
when @ldom = 5 then last_day(curdate()) - interval 6 day 
when @ldom = 4 then last_day(curdate()) - interval 5 day 
when @ldom = 3 then last_day(curdate()) - interval 4 day
when @ldom = 2 then last_day(curdate()) - interval 3 day
else last_day(curdate()) - interval 2 day
end as last_friday
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更聪明的方法.

编辑.我在samplebias上做了一些测试基础,找到了特定月份的最后一个星期一,星期二等等.

这些是正确的查询.

-- last sunday of month
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 6) % 7),"%Y%m%d") -- 2011-04-24

-- last saturday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 5) % 7),"%Y%m%d") -- 2011-04-30

-- last friday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 4) % 7),"%Y%m%d") -- 2011-04-29

-- last thursday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 3) % 7),"%Y%m%d") -- 2011-04-28

-- last wednesday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 2) % 7),"%Y%m%d") -- 2011-04-27

-- last tuesday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data)) - 1) % 7),"%Y%m%d") -- 2011-04-26

-- last monday
set @data = '2011-04-01'; 
select str_to_date(last_day(@data) - ((7 + weekday(last_day(@data))) % 7),"%Y%m%d") -- 2011-04-25
Run Code Online (Sandbox Code Playgroud)

希望它能帮助别人.再次感谢samplebias.;)

sam*_*ias 8

这是一个仅使用日期数学的简化版本:

SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
Run Code Online (Sandbox Code Playgroud)

根据如何NOW()评估(每个语句一次或两次),您可能仍希望将其包装在函数中并将结果存储NOW()到变量中,然后将该变量用于LAST_DAY(var)调用,以避免月份滚动的竞争条件在打电话之间NOW().