Sql 按客户和最长日期分组
我想按日期降序列出客户订单的最后付款 我编写了一个sql查询Sql 按客户和最长日期分组,sql,sql-server-2005,group-by,max,greatest-n-per-group,Sql,Sql Server 2005,Group By,Max,Greatest N Per Group,我想按日期降序列出客户订单的最后付款 我编写了一个sql查询 SELECT CARHARTAR, CARHARREFNO, CARHARCARKOD, CARHARCARUNVAN, CARHARACIKLAMA, CARHARTUTAR FROM CARHAR WHERE ( CARHARTIPI IN ( 2, 4 ) ) AND ( CARHARISTIPNO IN ( 2, 6 ) )
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
此查询按日期降序列出所有付款顺序。但我只需要最后一次付款。我正在使用由Carkod创建的组,但我有一个aggreate函数问题。我该怎么办
如果使用group by子句,则必须在group中包含所有要选择的字段
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
若使用GROUPBY子句,那个么必须在group中包含所有要选择的字段
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
我认为
ROW\u 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
我认为
ROW\u 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
谢谢你的帮助。但查询结果不正确。你可以在这里看到:我只需要客户最后的付款谢谢你的帮助。但查询结果不正确。你可以在这里看到:我只需要客户的最后一次付款,我知道集团的使用情况。但我需要所有字段(CARHARTAR、CARHARREFNO、CARHARCARKOD、CARHARCARUNVAN、Carharacilama、CARHARTUTAR),我不知道我应该做什么,我知道按用法分组。但是我需要所有字段(CARHARTAR、CARHARREFNO、CARHARCARKOD、CARHARCARUNVAN、CARHARACIKLAMA、CARHARTUTAR),我不知道应该使用什么样的Sql Server版本?哪些列构成主键?如果客户在同一天支付了两次,您希望显示哪些付款?我使用的是sql server 2005。表中没有主键。我们是一家批发公司,这就是为什么我们的客户不在一天内支付两次。如果存在一天内支付两次的付款,我可以将其相加。您使用的是哪个版本的Sql Server?哪些列构成主键?如果客户在同一天支付了两次,您希望显示哪些付款?我使用的是sql server 2005。表中没有主键。我们是一家批发公司,这就是为什么我们的客户不在一天内支付两次。如果存在一天内支付两次的付款,我可以合计。