我想按日期降序列出客户订单的最后一笔付款。
我写了一个sql查询
SELECT CARHARTAR,
CARHARREFNO,
CARHARCARKOD,
CARHARCARUNVAN,
CARHARACIKLAMA,
CARHARTUTAR
FROM CARHAR
WHERE ( CARHARTIPI IN ( 2, 4 ) )
AND ( CARHARISTIPNO IN ( 2, 6 ) )
AND ( CARHARCARKOD NOT LIKE 'W%' )
AND ( CARHARCARKOD NOT LIKE 'Z%' )
AND ( CARHARGCFLAG = 2 )
AND ( CARHARIADEFLAG = 0 )
ORDER BY CARHARTAR DESC
此查询按日期降序列出所有付款顺序。但我只需要最后一笔付款。我正在使用carharcarkod组,但我有一个聚合函数问题。我该怎么办?
答案 0 :(得分:1)
我认为ROW_NUMBER
函数可以完成您的工作:
;WITH Payments AS
( SELECT CARHARTAR,
CARHARREFNO,
CARHARCARKOD,
CARHARCARUNVAN,
CARHARACIKLAMA,
CARHARTUTAR,
ROW_NUMBER() OVER(PARTITION BY CARHARCARKOD ORDER BY CARHARTAR DESC) [RowNumber]
FROM CARHAR
WHERE CARHARTIPI IN (2, 4)
AND CARHARISTIPNO IN (2, 6)
AND CARHARCARKOD NOT LIKE 'W%'
AND CARHARCARKOD NOT LIKE 'Z%'
AND CARHARGCFLAG = 2
AND CARHARIADEFLAG = 0
)
SELECT CARHARTAR,
CARHARREFNO,
CARHARCARKOD,
CARHARCARUNVAN,
CARHARACIKLAMA,
CARHARTUTAR
FROM Payments
WHERE RowNumber = 1
ORDER BY CARHARTAR
答案 1 :(得分:0)
如果您使用group by子句,则必须包括要选择的组中的所有字段。
SELECT CARHARTAR,
CARHARCARKOD FROM CARHAR WHERE ( CARHARTIPI IN ( 2, 4 ) )
AND ( CARHARISTIPNO IN ( 2, 6 ) )
AND ( CARHARCARKOD NOT LIKE 'W%' )
AND ( CARHARCARKOD NOT LIKE 'Z%' )
AND ( CARHARGCFLAG = 2 )
AND ( CARHARIADEFLAG = 0 ) GROUP BY CARHARTAR,carharcarkod DESC
答案 2 :(得分:0)
with cte as(
SELECT CARHARCARKOD,max(CARHARTAR) [CARHARTAR]
FROM CARHAR
WHERE ( CARHARTIPI IN ( 2, 4 ) )
AND ( CARHARISTIPNO IN ( 2, 6 ) )
AND ( CARHARCARKOD NOT LIKE 'W%' )
AND ( CARHARCARKOD NOT LIKE 'Z%' )
AND ( CARHARGCFLAG = 2 )
AND ( CARHARIADEFLAG = 0 )
group by CARHARCARKOD )
select C.CARHARTAR,
C.CARHARREFNO,
C.CARHARCARKOD,
C.CARHARCARUNVAN,
C.CARHARACIKLAMA,
C.CARHARTUTAR
FROM cte join CARHAR C
on CTE.CARHARCARKOD =C.CARHARCARKOD
and cte.CARHARTAR= C.CARHARTAR