2016-06-10 121 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

它將始終從**當前**周選擇項目,如果今天是星期一,則將僅選擇今天的項目。我意識到有一個更簡單的方法,並用新的語法編輯答案。 –

相關問題