SQL根据最新日期选择行,包括较旧日期的总和?
我有一个复杂的问题。这是简短的版本。也许如果我能得到一点帮助,我就不需要更多的帮助了 无论如何,假设我有一个表,其中有几行示例:SQL根据最新日期选择行,包括较旧日期的总和?,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我有一个复杂的问题。这是简短的版本。也许如果我能得到一点帮助,我就不需要更多的帮助了 无论如何,假设我有一个表,其中有几行示例: CustNum - CustName - Salesman - Address - SoldTotal - SaleDate a500 - bubby's - 03 - 123 Street - $254 - 03-13-2013 a500 - bubby's - 22 - 123 Street - $996 - 05-12-2013 a500 - bubby's -
CustNum - CustName - Salesman - Address - SoldTotal - SaleDate
a500 - bubby's - 03 - 123 Street - $254 - 03-13-2013
a500 - bubby's - 22 - 123 Street - $996 - 05-12-2013
a500 - bubby's - 13 - 123 Street - $1001 - 09-20-2013
b100 - squirrely's - 14 - 456 Street - $460 - 03-14-2013
老板想要的是一份清单,其中包括每个买家的一行、最近的销售人员以及总销售额。上面的理想输出是(日期可用于比较目的,但他不想在报告中显示):
如何才能最好地实现这一点?我尝试了一个自连接,试图比较日期,但我得到了一个算术溢出。我一定是把措辞弄错了。有什么想法吗 下面是一个使用行数和总和窗口函数的示例:
with SampleData (CustNum, CustName, Salesman, Address, SoldTotal, SaleDate ) as (
select 'a500', 'bubbys', '03', '123 Street', 254, '03-13-2013' union all
select 'a500', 'bubbys', '03', '123 Street', 996, '05-12-2013' union all
select 'b100', 'squirrelys', '14', '456 Street', 460, '03-14-2013'
)
select CustNum, CustName, MostRecentSalesman, SoldTotal
from (
select
CustNum
, CustName
, MostRecentSalesman = Salesman
, rn = row_number() over (partition by CustNum order by SaleDate desc)
, SoldTotal = sum(soldTotal) over (partition by CustNum)
from SampleData
) x
where x.rn = 1
最初的“with SampleData…”部分只是有一些样本数据用于编写查询。下面是一个使用行数和总和窗口函数的示例:
with SampleData (CustNum, CustName, Salesman, Address, SoldTotal, SaleDate ) as (
select 'a500', 'bubbys', '03', '123 Street', 254, '03-13-2013' union all
select 'a500', 'bubbys', '03', '123 Street', 996, '05-12-2013' union all
select 'b100', 'squirrelys', '14', '456 Street', 460, '03-14-2013'
)
select CustNum, CustName, MostRecentSalesman, SoldTotal
from (
select
CustNum
, CustName
, MostRecentSalesman = Salesman
, rn = row_number() over (partition by CustNum order by SaleDate desc)
, SoldTotal = sum(soldTotal) over (partition by CustNum)
from SampleData
) x
where x.rn = 1
;WITH x AS
(
SELECT CustNum, CustName, SalesMan, Address,
s = SUM(SoldTotal) OVER (PARTITION BY CustNum),
r = ROW_NUMBER() OVER (PARTITION BY CustNum ORDER BY SaleDate DESC)
FROM dbo.YourTable
)
SELECT CustNum, CustName, SalesMan, Address, SoldTotal = s
FROM x
WHERE r = 1;
最初的“with SampleData…”部分只是为了有一些样本数据来编写查询
;WITH x AS
(
SELECT CustNum, CustName, SalesMan, Address,
s = SUM(SoldTotal) OVER (PARTITION BY CustNum),
r = ROW_NUMBER() OVER (PARTITION BY CustNum ORDER BY SaleDate DESC)
FROM dbo.YourTable
)
SELECT CustNum, CustName, SalesMan, Address, SoldTotal = s
FROM x
WHERE r = 1;
这是SQL Server吗?窗口功能在这里可以很好地工作……您知道,如果您可以提供SQL来创建带有示例行的表,或者将其作为csv文件提供,这将非常有用。然后,基于您的问题编写查询变得更容易。或者在上设置一个示例。这是SQL Server吗?窗口功能在这里可以很好地工作……您知道,如果您可以提供SQL来创建带有示例行的表,或者将其作为csv文件提供,这将非常有用。然后,基于您的问题编写查询变得更容易。或者在上设置一个示例。这可能会起作用。。。如何删除输出中的“rn”列?编辑后就是为了这样做,现在它缺少
地址。这可能会起作用。。。如何删除输出中的“rn”列?编辑后就是为了这样做,现在它缺少地址。