我有一個 mssql 表,其中包含如下資料:
| ID | 型別 | ToNum | 從號碼 | 日期 | 訊息 |
|---|---|---|---|---|---|
| 1 | 1 | 6025551212 | 6235551234 | 2022-11-05 13:44:00 | 這是一個測驗 |
| 2 | 1 | 4805554321 | 6235551234 | 2022-11-05 13:50:00 | 測驗資訊 |
| 3 | 2 | 6235551234 | 4805554321 | 2022-11-05 13:51:00 | 回復您的訊息 |
| 4 | 1 | 4805554321 | 6235551234 | 2022-11-05 14:01:00 | 得到你的回應! |
| 5 | 1 | 4805557891 | 6235551234 | 2022-11-05 14:02:00 | 測驗到 -7891 |
| 6 | 2 | 6235551234 | 4805557891 | 2022-11-05 14:04:00 | 你好!謝謝。 |
我想要的是一個 SQL 查詢,它將為我提供一個包含所有列的資料行的結果集,但只有任何 ToNum / FromNum 配對中的最新。結果集如下所示:
| ID | 型別 | ToNum | 從號碼 | 日期 | 訊息 |
|---|---|---|---|---|---|
| 1 | 1 | 6025551212 | 6235551234 | 2022-11-05 13:44:00 | 這是一個測驗 |
| 4 | 1 | 4805554321 | 6235551234 | 2022-11-05 14:01:00 | 得到你的回應! |
| 6 | 2 | 6235551234 | 4805557891 | 2022-11-05 14:04:00 | 你好!謝謝。 |
我嘗試了各種 JOINS、UNIONS 等方法,但不知道如何獲得我想要的東西。
uj5u.com熱心網友回復:
我們可以row_number()為此使用;訣竅是正確磁區:
select t.*
from (
select t.*,
row_number() over(
partition by least(tonum, fromnum), greatest(tonum, fromnum)
order by sdate desc
) rn
from mytable t
) t
where rn = 1
least()并且greatest僅在 SQL Server 2022 中可用。在早期版本中,我們可以使用case運算式:
select t.*
from (
select t.*,
row_number() over(
partition by
case when tonum < fromnum then tonum else fromnum end,
case when tonum > fromnum then tonum else fromnum end
order by sdate desc
) rn
from mytable t
) t
where rn = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530023.html
