代码之家  ›  专栏  ›  技术社区  ›  Paul

Linq To Sql/Sql查询帮助

  •  2
  • Paul  · 技术社区  · 16 年前

    我有一张这样的桌子:

    Id    PageId    Key    Content    LastUpdated
    ---------------------------------------------
    
     1     12       key1    content1   02-21-2010
     2     12       key1    content2   02-25-2010
     3     12       key2    content1   02-21-2010
     4     12       key2    content2   02-25-2010
     5     12       key3    content1   02-21-2010
    

    2     12       key1    content2
    4     12       key2    content2
    5     12       key3    content1
    

    我正在使用Linq-2-Sql,但是如果需要的话,我可以使用SP。任何关于如何实现这一点的帮助都会很好,谢谢!

    2 回复  |  直到 16 年前
        1
  •  3
  •   Joe Stefanelli    16 年前

    这里有一个使用tsql的想法,您可以将它放在一个SP中(假设LastUpdated是一个datetime字段,而不是您列出的格式的字符串,并假设至少使用sql2005 CTE . 如果这些假设不正确,那么它们中的任何一个都可以被克服。):

    ;with cteMaxUpdated as (
        select Key, max(LastUpdated) as MaxUpdated
            from YourTable
            group by Key
    )
    select yt.Id, yt.PageId, yt.Key, yt.Content
        from cteMaxUpdated mu
            inner join YourTable yt
                on mu.Key = yt.Key
                    and mu.MaxUpdated = yt.LastUpdated
    
        2
  •  1
  •   Frank    16 年前

    在SQL中,其工作方式如下:

    WITH i as (
      SELECT Id, PageId, Key, Content, dense_rank() over(PARTITION BY Key ORDER BY LastUpdated desc) as pos
        FROM myTable
    )
    SELECT Id, PageId, Key, Content
      FROM i
     WHERE pos = 1
    

    在这里,我假设您的意思是“按键显示不同的列表”,而不是“按PageId显示不同的列表”。

    您应该知道,如果每个键的日期不是唯一的,这将返回键的最大日期的所有记录。如果您只想拥有其中一个,您可以向orderby中添加其他字段。