簡體   English   中英

如何使用 MYSQL 將外部查詢中的日期與內部查詢中的日期進行比較?

[英]How to compare a date from outer query with date in inner query using MYSQL?

我有客戶、工作、訂單和日期作為列。 客戶可以對每個作業有多個訂單,當然也可以在給定特定日期范圍內進行多個作業。
我想做的是弄清楚在特定日期范圍內有多少“新”訂單。 也就是說,如果一個作業有 5 個訂單,它應該只返回 1 個訂單。 這是一個簡短的數據庫表示例、所需結果以及到目前為止我一直在嘗試使用的查詢。

+-------+-------+---------+------------+
| CusID | JobID | OrderNo |  OrderDate |
+-------+-------+---------+------------+
|   1   |   10  |    25   | 2021-12-22 |
|   1   |   10  |    26   | 2022-02-09 |
|   3   |   5   |    28   | 2022-01-10 |
|   3   |   6   |    29   | 2022-01-11 |
+-------+-------+---------+------------+

有 4 行訂單及其關聯的JobID 查詢應返回 2 行,因為訂單 25 和訂單 26 都與JobID 10 關聯,只有 1 行可以算作“新”,而OrderNo 25 不在外部查詢日期范圍內。
這是我嘗試使用的查詢,基於日期>=到今年的第一天。 我希望能夠使用外部查詢中的OrderDate與內部查詢中的OrderDate進行比較。 如果有一個JobIDOrderDate小於當前行的OrderDate該訂單不是新的並且應該返回JobID ,從而使內部查詢為假並過濾掉該行。

SELECT * FROM orders
WHERE OrderDate >= '2022-01-01' 
AND JobID NOT IN 
(SELECT JobID FROM orders WHERE inner.OrderDate < outer.OrderDate)

預期結果

|   3   |   5   |    28   | 2022-01-10 |
|   3   |   6   |    29   | 2022-01-11 |

使用row_number對每個作業的訂單進行排名。 把它放在子查詢中,只接受 最新 的最舊的? 每個作業的順序。

select custid, jobid, orderNo, orderDate
from (
  select
    *,
    row_number() over ( partition by jobid order by orderDate asc ) as oldest
  from orders
) a
where a.oldest = 1
  and orderDate >= '2022-01-01'

示范

您的查詢正朝着正確的方向前進,您只需要將別名應用於外表,以便它是唯一可識別的 -

SELECT *
FROM orders `outer`
WHERE OrderDate >= '2022-01-01'
AND JobID NOT IN
    (SELECT JobID FROM orders WHERE OrderDate < `outer`.OrderDate);

根據您的時間范圍內包含的行數以及每個作業的平均訂單數,您可能希望先匯總 -

SELECT *
FROM (
    SELECT JobID, MIN(OrderDate) AS MinOrderDate
    FROM orders
    WHERE OrderDate >= '2022-01-01'
    GROUP BY JobID
) o
WHERE JobID NOT IN
    (SELECT JobID FROM orders WHERE OrderDate < o.MinOrderDate);

假設一項工作可能在一個日期有多個訂單,您可能需要考慮使用 OrderNo 而不是 OrderDate 進行比較 -

SELECT *
FROM orders `outer`
WHERE OrderDate >= '2022-01-01'
AND JobID NOT IN
    (SELECT JobID FROM orders WHERE OrderNo < `outer`.OrderNo);

暫無
暫無

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

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