我有一個查詢顯示如下結果:
| 客戶ID | 租來的汽車 | 購買日期 | SELL_dATE |
|---|---|---|---|
| 001 | 法拉利 | 01-03-2018 | 空值 |
| 002 | 躲閃 | 01-03-2013 | 01-02-2015 |
| 001 | 法拉利 | 01-01-2017 | 02-02-2020 |
| 002 | 躲閃 | 01-03-2019 | 空值 |
| 002 | 躲閃 | 01-03-2019 | 01-03-2020 |
| 003 | 雷諾 | 01-03-2019 | 01-03-2020 |
查詢是
SELECT c.customer_id, s.name as rented_car,s.buy_date, s.sell_date
FROM company c
LEFT JOIN "user" u ON u.customer_id = c.customer_id
LEFT JOIN "cars" s ON s.customer_id = c.customer_id
我想獲取目前沒有租車的所有客戶的 ID。如果我在 where 子句中使用像“where sell_date IS NOT NULL”這樣的代碼,它將顯示客戶 ID 01,02,03,正確答案僅為客戶 ID 03。
在此先感謝您的幫助
uj5u.com熱心網友回復:
您需要一個按 CUSTOMER_ID 對結果進行分組的查詢。你可以嘗試這樣的事情:
SELECT c.customer_id
FROM company c
LEFT JOIN "user" u ON u.customer_id = c.customer_id
LEFT JOIN "cars" s ON s.customer_id = c.customer_id
GROUP BY c.customer_id
HAVING NOT bool_or(daterange(s.buy_date, s.sell_date) @> Now() :: date)
在dbfiddle 中查看測驗結果。
uj5u.com熱心網友回復:
您可以使用視窗函式首先確定為每個客戶選擇哪個記錄,然后應用您的 where 子句。這是一個例子
WITH cte AS
(
SELECT c.customer_id,
s.name as rented_car,
s.buy_date,
s.sell_date,
ROW_NUMBER() OVER(partition BY c.customer_id ORDER BY s.buy_date DESC) AS rn
FROM company c
LEFT JOIN "user" u ON u.customer_id = c.customer_id
LEFT JOIN "cars" s ON s.customer_id = c.customer_id
)
SELECT customer_id,
rented_car,
buy_date,
sell_date
FROM cte
WHERE rn = 1
AND sell_date IS NOT NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392794.html
標籤:sql 数据库 PostgreSQL的 加入 数据库管理系统
上一篇:具有多個條件的SQL查詢
下一篇:選擇兩列時,洗掉查詢不起作用
