[英]How to compare dates between rows with same column values except one or two columns?
我對 SQL 查詢的邏輯有疑問,請幫我解決這個問題。
如何 select SQL 服務器中單個發票號的最早過帳日期的行:
發票號碼 | 姓名 | 發布日期 | 地方 |
---|---|---|---|
2050 | 恐龍 | 20.05.1998 | 倫敦 |
:-------------- | :-------------------- | --------------- | -------------- |
2050 | 恐龍 | 25.04.1995 | 澳大利亞 |
--------------- | -------------------- | --------------- | -------------- |
2045 | 鳥類 | 1997 年 3 月 18 日 | 美國 |
--------------- | -------------------- | --------------- | -------------- |
2045 | 鳥類 | 27.07.1995 | 中國 |
--------------- | -------------------- | --------------- | -------------- |
2075 | 獅子 | 12.06.2012 | 印度 |
-------------------------------------------------- ------------------ |
我想像這樣查詢 output:
發票號碼 | 姓名 | 發布日期 | 地方 |
---|---|---|---|
2050 | 恐龍 | 25.04.1995 | 澳大利亞 |
--------------- | -------------------- | --------------- | -------------- |
2045 | 鳥類 | 27.07.1995 | 中國 |
--------------- | -------------------- | --------------- | -------------- |
2075 | 獅子 | 12.06.2012 | 印度 |
-------------------------------------------------- ------------------ |
我正在努力研究如何比較兩個過帳日期的日期並返回 SQL 服務器中每個發票號的過帳日期列值最低的行。
我之前嘗試使用 MIN() 和 INNER JOIN 但它對我復雜的代碼庫沒有幫助,所以我在這里以簡單的方式顯示它。
先感謝您。
window 函數是您的朋友。 非常值得您花時間熟悉它們。 也不清楚您是否需要在partition by
中使用NAME
此外,如果您想查看平局...使用dense_rank()
而不是row_number()
更高效
Select *
From (
Select *
,RN = row_number() over (partition by InvoiceNumber,Name order by PostingDate)
From YourTable
) A
Where RN=1
另外的選擇
Select top 1 with ties *
From YourTable
Order by row_number() over (partition by InvoiceNumber,Name order by PostingDate)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.