【发布时间】:2014-07-03 07:44:48
【问题描述】:
我想从联合列中获取最后一个请求日期。 我有这个代码来显示最后的请求日期:
;with cte
as
(
select
[Date], [Badge id], Name, Reason, [Item1] item,
row_number() over (partition by [Badge id], [Item1] order by getdate()) rn
from tbl_Request2
where [Item1] Is Not null
union
select
[Date], [Badge id], Name, Reason,[Item2] item,
row_number() over (partition by [Badge id], [Item2] order by getdate()) rn
from tbl_Request2 where [Item2] is not null union
)
Select
T.[Badge ID], T.Name, T.Item, T.Reason, T. [Date] as [Current Request],
ISNULL((Select top 1 [Date]
from CTE
where
CTE.[Badge Id]=T.[Badge Id] and
CTE.[Item] = T.item and
CTE. [Date] < T. [Date]),T. [Date]) as [Last Requested]
From CTE T
order by [Badge ID]
它确实显示了最后一条记录,但不是预期的。它显示,例如:
2014 年 5 月 12 日 ID 001 请求 item1 THEN
ID 001 在 13/05/2014 再次请求 Item1 ;它显示最后请求的 12/05/2014 ;然后
ID 001 在 14/05/2014 再次请求 Item1 ;它显示最后请求的 12/05/2014 ; --> 这是错误 我希望它显示 2014 年 13 月 5 日的最后一个请求
预期的表:
ID | Items | Date | Last Request Date
001 | Item1 | 12/05/2014 | 12/05/2014 --> lets say this is the first request of ID001
002 | Item2 | 25/04/2014 | 20/05/2014
001 | Item1 | 13/05/2014 | 12/05/2014 --> It display the date of first requested
001 | Item1 | 14/05/2014 | 13/05/2014 --> display the second request date
您对这个错误有什么建议吗? 很抱歉再次发布它。我昨天已经问过这个问题了,但还是有一些错误。
提前致谢....
【问题讨论】:
标签: sql sql-server vb.net select union