【问题标题】:How to take the last Request date like a history of request如何获取最后一个请求日期,例如请求历史记录
【发布时间】: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


    【解决方案1】:

    这有点尴尬。我问一个问题并自己回答。我只是意识到我的代码中缺少一些东西。我只需要删除前 1 并在我的代码中添加 max(date)。很抱歉问了我的错误。

    ;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 max[Date] as [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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 2020-07-01
      • 2014-07-22
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多