[英]SQL Select three rows with a max row from same table and joining with a second table
我覺得最大的atraso
每個合同,但我也不能提取NUM_PARCELA
,只有contrato
通過,因為我組contrato
。
任何建議,以提取num_parcela
, max_atraso
每個contrato
?
Select
a.[CONTRATO]
,a.[NUM_PARCELA]
,a.[DATA_PAGAMENTO]
,a.[DATA_VENCTO]
,b.[DATA_LIBER_CONTRATO]
,DATEDIFF(day, a.DATA_VENCTO, a.DATA_PAGAMENTO) as ATRASO
INTO #temp1
from [fprisco].[dbo].[ParcelasGrc2] as a
inner join [fprisco].[dbo].[ContratosGrc2] as b
on b.contrato=a.contrato
where b.data_liber_contrato >'2017-02-28 00:00:00.000'
Select
contrato,
max(atraso) as Max_Atraso
from #temp1
group by contrato
order by contrato desc
我需要的是最大atraso
每個contrato
,並采取哪些num_parcela
與最大匹配atraso
。 Num_Parcela
具有每個合同的多個記錄,並且只有一個具有最大atraso
匹配atraso
。
有更多方法可以執行此操作,請參見以下兩種方法:
測試用例:
DECLARE @temp1 TABLE (contrato int, atraso int, num_parcela int)
INSERT INTO @temp1 VALUES (1,5,1)
INSERT INTO @temp1 VALUES (1,4,2)
INSERT INTO @temp1 VALUES (1,3,3)
INSERT INTO @temp1 VALUES (2,2,1)
INSERT INTO @temp1 VALUES (2,3,1)
INSERT INTO @temp1 VALUES (2,4,2)
具有分組依據的第一個變體,並返回到原始表
;WITH MaxAtraso AS (
Select
contrato,
max(atraso) as Max_Atraso
from @temp1
group by contrato
)
SELECT m.*, t.num_parcela FROM MaxAtraso m
JOIN @temp1 t
ON m.Max_Atraso = t.atraso AND m.contrato = t.contrato
ORDER BY contrato DESC
使用ROW_NUMBER()排序列表的第二個變體:
;WITH OrderByAtraso AS (
Select
contrato,
num_parcela,
atraso,
ROW_NUMBER() OVER (PARTITION BY contrato ORDER BY atraso DESC) rn
from @temp1
)
SELECT * FROM OrderByAtraso WHERE RN=1 ORDER BY contrato DESC
同樣,無需為此操作創建臨時表,您可以像這樣重寫:
;WITH OrderByAtraso AS (
Select
a.[CONTRATO]
,a.[NUM_PARCELA]
,a.[DATA_PAGAMENTO]
,a.[DATA_VENCTO]
,b.[DATA_LIBER_CONTRATO]
,DATEDIFF(day, a.DATA_VENCTO, a.DATA_PAGAMENTO) as ATRASO
,ROW_NUMBER() OVER (
PARTITION BY contrato
ORDER BY DATEDIFF(day, a.DATA_VENCTO, a.DATA_PAGAMENTO) DESC) RN
from [fprisco].[dbo].[ParcelasGrc2] as a
inner join [fprisco].[dbo].[ContratosGrc2] as b
on b.contrato=a.contrato
where b.data_liber_contrato >'20170228'
)
SELECT contrato, atraso as MaxAtraso, num_parcela
FROM OrderByAtraso WHERE RN=1 ORDER BY CONTRATO DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.