我有一张这样的桌子:
Article Number Last Voucher Number Last Voucher Date
0557934 519048 04/02/2005
0557934 519067 04/02/2005
0557934 528630 09/29/2005
0557934 528631 09/29/2005
0557934 529374 10/13/2005
0557934 529375 10/13/2005
0557934 529471 10/16/2005
0557934 529472 10/16/2005
0557934 535306 01/08/2006
0557934 535307 01/08/2006
0557934 1106009 08/10/2006
0557934 1106010 08/10/2006
0022738 22554 02/20/1995
0022738 22595 03/12/1995
0022738 22597 03/15/1995
0022738 22605 03/19/1995
0022738 22616 03/25/1995
0022738 22621 03/28/1995
0022738 22630 04/05/1995
我希望只有最后日期的记录:
Article Number Last Voucher Number Last Voucher Date
0557934 1106010 08/10/2006
0022738 22630 04/05/1995
我可以直接在SQL或Linq上进行。
有什么想法吗?
菊
答案 0 :(得分:4)
最简单的方法可能是使用row_number
。这也打破了同一凭证日期的关系:
select *
from (
select
*
, row_number() over (partition by [Article Number]
order by [Last Voucher Date] desc, [Last Voucher Number] desc) as RowNr
from YourTable
) as SubQueryAlias
where RowNr = 1
另一个选项是where not exists
子句:
select *
from YourTable yt
where not exists (
select *
from YourTable yt2
where yt.[Article Number] = yt2.[Article Number]
and yt.[Last Voucher Date] < yt2.[Last Voucher Date]
)
如果是最新凭证日期的关联,则会返回两行。
答案 1 :(得分:2)
您需要提取每篇文章的最后日期,然后重新加入以获取最后一个凭证编号。否则,您也会将最后一个凭证编号分组。
当然,这会为文章0557934返回2行,但同一日期的平局判断标准是什么? 这比我发现的使用ROW_NUMBER更常见,但YMMV.And ROW_NUMBER是你如何应对抢七局面
SELECT
M.*
FROM
(
SELECT
MAX([Last Voucher Date]) AS LastDate,
[Article Number]
FROM
Mytable
GROUP BY
[Article Number]
) MMax
JOIN MyTable M ON MMax.[Article Number] = M.[Article Number] AND MMax.LastDate = M.[Last Voucher Date]
答案 2 :(得分:0)
如果您使用的是Oracle,则可以执行以下操作:
select *
from
(select *
from Table
order by voucher_date)
where rownum = 1