Нужна помощь для запроса выбора SQL для этих двух таблиц - PullRequest
1 голос
/ 07 октября 2010

Таблица захвата изображения: http://img844.imageshack.us/img844/6213/99730337.jpg

------------ PositionTable------------
ID    ContentFK   Position
11     100               1
12     101               1
13     104               2
14     102               2
15     103               2
16     105               3
17     106               3
18     107               2


----------Content Table ------------
ContentID   UpdateDate  Title
100          11.10.2009    Aol
101          12.10.2009    Microsoft
102          12.10.2009    e-Bay
103          12.11.2009    google
104          16.11.2009    novell
105          17.11.2009    asus
106          16.11.2009    nokia
107          11.11.2009    samsung

Кто может мне помочь с вопросом между двумя таблицами Мой сценарий.

Сортировать по номеру как Позиция 1,2,3. Тем не менее, ряд групп, чтобы перечислить только одну запись (порядок по позиции ASC (позиция: 1,2,3)

С PositionTable.ContentFK = ContentTable.ContentID по UpdateDate последнего обновления в ContentTablo

Как я могу получить список такой же, как результат.

p.Postion     p.ID            p.ContentFK     c.UpdateDate      c.Title

1             12              101             12.10.2009        Microsoft 
2             13              104             16.11.2009        novell 
3             16              105             17.11.2009        asus

Спасибо всем,

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Это должно сделать это:

РЕДАКТИРОВАТЬ : Оригинальный код был, потому что я думал, что ваши даты были MM.DD.YYYY.Реализованы ваши даты: ДД.ММ.ГГГГ и соответствующий код.

РЕДАКТИРОВАТЬ 2 : Изменен ответ на основе обратной связи для типа данных UpdateDate.

;with cteMaxDate as (
    select p.Position, MAX(c.UpdateDate) as MaxDate
        from PositionTable p
            inner join ContentTable c
                on p.ContentFK = c.ContentID
        group by p.Position
)
select p.Position, p.ID, p.ContentFK, c.UpdateDate, c.Title
    from cteMaxDate m
        inner join PositionTable p
            on m.Position = p.Position
        inner join ContentTable c
            on p.ContentFK = c.ContentID
                and m.MaxDate = c.UpdateDate
0 голосов
/ 07 октября 2010

Попробуйте:

select Position,  ID, ContentFK, UpdateDate, Title
from (
select  p.Position,
    p.ID,
    p.ContentFK,
    c.UpdateDate,
    c.Title,
    row_number() over (partition by p.Position order by p.Position, c.UpdateDate desc) as num
from    Position p inner join
    Content c on p.ContentFK = c.ContentId ) a
where   num = 1
0 голосов
/ 07 октября 2010

Подзапрос немного уродлив (и коррелирован), но это самый простой способ, которым я могу думать.

Предполагая, что ваш столбец UpdateDate равен DATETIME - в противном случае вам придется сделать что-то, как сделал Джо (или, лучше, изменить столбец на DATETIME: -)

select p.Position
    ,p.ID
    ,p.ContentFK
    ,c.UpdateDate
    ,c.Title
from PositionTable p
join ContentTable c
    on p.ContentFK = c.ContentID
    and c.UpdateDate = (select max(ic.UpdateDate) from ContentTable ic
                            join PositionTable ip
                                on ip.ContentFK = ic.ContentID
                            where ip.Position = p.Position)
order by p.Position 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...