2016-06-10 120 views
-1

我正在查找所有在上一个星期一和下一个星期日之间的预订日期在MySQL中的记录。上次星期一和下个星期日之间的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 

我在寻找什么,代入lastmonday和nextsunday

任何帮助,非常感谢!

+0

是的,可以。我们怎么知道? – Strawberry

+0

“lastmonday”是指最近的星期一,还是本周之前一周的星期一(在这种情况下哪一天是星期开始的)?即如果今天是星期一,今天是“lastmonday”还是一周前的“lastmonday”?如果今天是星期二是昨天还是8天前的lastmonday? –

+0

@Strawberry - 你是什么意思? –

回答

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); 
+0

感谢@Matt会不会动态改变? –

+0

另外,如果一天是星期一,今天会选择吗? –

+0

它将始终从**当前**周选择项目,如果今天是星期一,则将仅选择今天的项目。我意识到有一个更简单的方法,并用新的语法编辑答案。 –

相关问题