从上周开始上一个“活跃”日

时间:2016-07-04 14:29:40

标签: mysql weekday

在我的工具中,用户可以设置他们的工作日(例如:星期一到星期五)。当他们保存设置时,它将存储在mysql用户表中。

在接下来的一周(本周),我将获得他们的“最后一个工作日”。在这种情况下,它将是星期五。如何使用mysql从每个用户那里获得最后一个工作日?

目前我将工作日保存在csv(2,3,4,5,6 - 2 =星期一......)但我可以改变它。

我尝试了WEEKDAY()的一些东西,但它不起作用。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

DAYNAME(CONCAT('1970-09-2', SUBSTRING_INDEX(workdays, ',', -1)))

<强>解释

这个MySQL字符串函数SUBSTRING_INDEX

SUBSTRING_INDEX(workdays, ',', -1)

...会显示列出的最后一个工作日的编号。 (它的作用是查找逗号的所有位置,并在最后一个逗号后返回所有内容,例如SUBSTRING_INDEX('1,2,3', ',', -1)返回3.)

来自here的这个技巧,使用DAYNAMECONCAT

DAYNAME(CONCAT('1970-09-2', dayIndex))

...给你一天的名字。 (由于DAYNAME需要一个日期,因此该技术选择过去的日期,即星期日,结束于0,在本例中为1970-09-20,并用返回的索引替换最后一位数,以确定相应的星期几,例如,20 =星期日,21 =星期一,等等。)

把它们放在一起:

SELECT DAYNAME(CONCAT('1970-09-2', SUBSTRING_INDEX(workdays, ',', -1))) AS lastday FROM ...

...您将获得lastday变量中返回的工作日的相应名称。

答案 1 :(得分:0)

下面的sql查询可能会给你一些帮助。希望你只是要求这个。它将列出每个用户的最后一个工作日(friday)。

SELECT * FROM tablename 
WHERE user_id, workday_id IN 
(SELECT user_id, MAX(workday_id) FROM tablename GROUP BY user_id );