簡體   English   中英

mysql選擇datetime字段小於指定值的所有記錄

[英]mysql select all records where a datetime field is less than a specified value

所以我試圖運行一個將選擇的查詢,在這種情況下,沒有預約的客戶是X時間(例如2周)。 它歸結為“向我顯示未在2周內預約的客戶名單”。 我試圖通過做類似的事情來解決這個問題:

$date = new DateTime;
$ago = new DateInterval('P2W');
$target = $date->sub($ago);
//query to select clients that aren't scheduled after the $target date
$clients = ...;

涉及兩個表, appt_tblclients_tbl appt_tbl為每個約會記錄存儲client_id。

基本上我需要的是為每個客戶選擇“最大”約會,如果它是<我的$目標日期,請將它們包含在查詢結果中。 我嘗試了各種各樣的查詢,查詢子查詢,但我很難找到正確的查詢。

我目前的嘗試看起來像:

SELECT * 
FROM clients_tbl 
INNER JOIN
(
    SELECT client_id 
    FROM appt_tbl 
    WHERE MAX(appt_date_time) < '2012-07-22' 
    GROUP BY client_id
) appts ON appts.client_id = clients_tbl.client_id;

這還應該包括從未安排過的客戶(IE不會出現在appt_tbl中),但不包括在接下來的兩周內預約的客戶。

SELECT a.*
FROM clients_tbl a
LEFT JOIN appt_tbl b ON 
          a.client_id = b.client_id AND 
          b.appt_date_time >= CURDATE() - INTERVAL 2 WEEK 
WHERE b.client_id IS NULL

此查詢首先執行的操作(在WHERE過濾之前)選擇所有客戶端,無論他們是否具有超過兩周前的計划約會。

如果客戶端沒有超過兩周的約會,則聯接表中的值將為NULL 我們希望連接條件不滿足的所有行(即連接表中的值為null),這是通過WHERE b.client_id IS NULL

這也包括完全沒有任何相應約會的結果集客戶。

未來有約會的客戶將被排除在外。

也沒有必要在PHP中構造日期時間字符串。 您可以直接在查詢中執行此操作(盡管您可以將周數作為參數傳遞)。

我認為這可能很簡單。

select users from time_sheet where created_date >= date('2013-12-01');

在你的情況下,你必須這樣做。 而不是這個

WHERE MAX(appt_date_time) < '2012-07-22' 

做這個

WHERE MAX(appt_date_time) < date('2012-07-22')

這實際上使日期比較,早期的一個是字符串比較的日期。

干杯!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM