我希望找到所有在MySQL上一个星期一和下一个星期日之间有预订日期的记录。
到目前为止,我有:
SELECT firstname
, lastname
, sessions
, (SELECT COUNT(memberid)
FROM bookings
WHERE m.memberid = b.memberid
and b.date between lastMonday and nextSunday) as sessionsused
from members
我正在寻找替代上一个星期和nextsunday
的内容非常感谢任何帮助!
答案 0 :(得分:2)
MySQL的YEARWEEK()
函数为每周选择一个唯一值,您可以将其用于比较。它需要a second parameter来指定周是从周日(0)还是周一(1)开始。
SELECT COUNT(memberid)
FROM bookings
WHERE m.memberid = b.memberid
AND YEARWEEK(b.date, 1) = YEARWEEK(NOW(), 1);
这将始终选择本周b.date
所在的行。对于过去的特定周,请更改NOW()
以获取所需的日期表达式。
对于更常见的情况,即你的周没有在周日或周一开始,你需要一些稍微复杂的逻辑。在这里,您将@weekday
替换为您的周开始的日期,2 =周二,3 =周三,4 =周四,5 =周五,6 =周六。
SELECT COUNT(memberid)
FROM bookings
WHERE m.memberid = b.memberid
AND DATE(b.date)
BETWEEN DATE_SUB(DATE(NOW()), INTERVAL (WEEKDAY(NOW()) - @weekday + 7) % 7 DAY)
AND DATE_ADD(DATE(NOW()), INTERVAL 6 - (WEEKDAY(NOW()) - @weekday + 7) % 7 DAY);