[英]How use correctly a condition with dates in sql?
我有這個查詢:
SELECT
t1.usu_id,
t2.usu_nombre,
t2.usu_apellido
FROM
act_regisdiario t1
INNER JOIN
act_usuario t2
ON
(t2.usu_id = t1.usu_id)
WHERE
t1.rdi_fechacti != '2016-06-02 00:00:00'
AND t2.usu_admin = 0
GROUP BY
t2.usu_id
該查詢可以處理2個表:
act_regisdiario:
和act_usuarios:
因此,我希望您選擇具有不同rdi_fechacti
的用戶。 在這種情況下是:2016-06-02 00:00:00
但這向我展示了所有usu_nombre
,但只有Jean
有2016-06-02 00:00:00
我只需要讓Jean
。
對不起,我的英語。
所有用戶至少有一行符合您的條件。
而是使用not exists
:
SELECT u.*
FROM act_usuario u
WHERE NOT EXISTS (SELECT 1
FROM act_regisdiario r
WHERE u.usu_id = r.usu_id AND
r.rdi_fechacti = '2016-06-02 00:00:00'
)
u.usu_admin = 0;
請注意,您也不需要為此進行匯總。
您的查詢要查詢的是沒有該日期時間的任何內容,這將嘗試與該日期時間的記錄進行JOIN操作,並且僅接受“失敗”的記錄:
SELECT DISTINCT
t2.usu_id,
t2.usu_nombre,
t2.usu_apellido
FROM act_usuario t2
LEFT JOIN act_regisdiario t1
ON (t2.usu_id = t1.usu_id AND t1.rdi_fechacti = '2016-06-02 00:00:00')
WHERE t1.rdi_fechacti IS NULL and t2.usu_admin = 0
ORDER BY t2.usu_id
;
將您的WHERE
子句更改為此:
WHERE t1.rdi_fechacti < '2016-06-02 00:00:00' OR t1.rdi_fechacti > '2016-06-02 23:59:59'
and t2.usu_admin = 0
這表示排除任何帶有t1.rdi_fechacti == '2016-06-02 00:00:00'
,並且不需要對起始代碼進行重大更改。 您應該能夠只更新DATETIME
的日期部分,以搜索排除窗口中可能存在的其他任何內容。
我希望這有幫助。
-C§
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.