[英]Query results with consecutive duplicates remove
嗨,我想知道如何從基於單列的查詢結果中刪除連續的重復項。 在這種情況下,null表示他們不想購買任何東西,因此單擊后退按鈕。 我想要買家提供的商品變更歷史記錄,以及最早的購買信息。
在buy_date之前從項目訂單中選擇項目,買方,buy_date
item buyer buy_date
null Sam 04/24/2016
Lipstick Anna 05/31/2016
Charger Tim 06/01/2016
Charger James 06/03/2016
null Tim 06/03/2016
null James 06/04/2016
Nail Polish Sarah 06/04/2016
這是測試結果的示例。
現在我的新結果應該是
item buyer buy_date
null Sam 04/24/2016
Lipstick Anna 05/31/2016
Charger Tim 06/01/2016
null Tim 06/03/2016
Nail Polish Sarah 06/04/2016
僅保留連續重復項中的第一個。 我沒有刪除任何記錄。 我只是過濾出結果,以便刪除連續的重復項。
您可以使用ANSI標准窗口功能執行此操作。 一種方法使用lag()
獲得前一項。 然后,它匯總項目更改的次數,並使用此信息來查找每個組中的第一行:
select r.*
from (select r.*, row_number() over (partition by grp order by date) as seqnum
from (select r.*,
sum(case when prev_item = item then 0 else 1 end) over (order by buy_date) as grp
from (select r.*, lag(item) over (order by buy_date) as prev_item
from results r
) r
) r
) r
where seqnum = 1;
嗯 我想不到那個。 您只需要lag()
:
select r.*
from (select r.*, lag(item) over (order by buy_date) as prev_item
from results r
) r
where prev_item is null or prev_item <> item;
盡管我可能沒有理解這個問題,但我會說,最簡單的方法是根據其名稱僅提取一個唯一的項目,以便在該字段上使用DISTINCT。 因此,新查詢如下所示:
select DISTINCT(item), buyer, buy_date from item order by buy_date
編輯:沒關系。 我看到這個問題專門針對連續結果。 請參閱戈登的回應。
請注意,MySQL沒有lag()函數,但我確實設法找到了這篇文章來模擬一個: 模擬MySQL中的lag函數
祝好運!
這是一個通用查詢,如果它們不支持lag
或partition by
功能partition by
(例如在MySQL中),則可以在任何數據庫上使用
select ITEM,BUYER,BUY_DATE from
(
select t1.item,
max(t1.buyer) as buyer,
max(t1.buy_date) as buy_date,
count(*) as cnt
from myTable t1
inner join myTable t2
on t1.item=t2.item
and t1.buy_date <=t2.buy_date
group by t1.item,t1.buy_date
)
where cnt=1
內部查詢將基於buy_date
得出計數,因此它將為每個item
提供最新記錄。 如果您希望以其他方式返回結果,則可以將連接條件更改為t1.buy_date >=t2.buy_date
。
內部查詢將為您提供如下輸出。
+-------------+-------+----------------------+-----+
| ITEM | BUYER | BUY_DATE | CNT |
+-------------+-------+----------------------+-----+
| Lipstick | Anna | 31-MAY-2016 00:00:00 | 1 |
| Charger | James | 03-JUN-2016 00:00:00 | 1 |
| Charger | Tim | 01-JUN-2016 00:00:00 | 2 |
| Nail Polish | Sarah | 04-JUN-2016 00:00:00 | 1 |
+-------------+-------+----------------------+-----+
現在在外部查詢中,給條件cnt=1
只能獲取不同的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.