Справка по Linq To Sql / SQL Query - PullRequest
       1

Справка по Linq To Sql / SQL Query

2 голосов
/ 27 августа 2010

У меня есть таблица, которая выглядит следующим образом:

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

Что мне нужно сделать, это запросить отдельный список по PageId, упорядоченный LastUpdated, так что мой результат будет выглядеть так:*

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

Я использую Linq-2-Sql, но если бы мне было нужно, я мог бы использовать SP.Любая помощь в том, как этого добиться, была бы великолепна, спасибо!

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Вот одна идея, использующая только tsql, которую вы можете поместить в SP.(Предполагается, что LastUpdated является полем даты и времени, а не строкой в ​​указанном вами формате, и предполагается, что по крайней мере SQL 2005 будет использовать 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
1 голос
/ 27 августа 2010

В 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

Здесь я предполагаю, что вы имели в виду «отдельный список по ключу» вместо «отдельный список по идентификатору страницы».

Вы должныИмейте в виду, что в случае, если дата на ключ не уникальна, это вернет все записи для максимальной даты ключа.Если вы просто хотите иметь один из них, вы можете добавить дополнительные поля в ORDER BY.

И если вам все равно, какую из нескольких неуникальных записей на ключ вернуть, вы можете использовать ROW_NUMBER () вместо DENSE_RANK ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...