![](/img/trans.png)
[英]How to select maximum of all values in datetime field but less or equal to other datetime value?
[英]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_tbl和clients_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.