Проблема с последней записью SQL - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть две таблицы:

UserTable содержит (UserID, UserName) и StoryTable содержит (StoryID, UserID (foreignkey), StoryName, InsertedDate)

Как я могу запросить, чтобы получить каждое имя пользователя вместе с последним названием истории, которое он опубликовал? (Я новичок в запросах, поэтому прошу прощения, если это довольно просто)

Я пытался:

ВЫБЕРИТЕ a.Username, b.StoryName ОТ [dbo]. [UserTable] как ВНУТРЕННЕЕ СОЕДИНЕНИЕ [dbo]. [StoryTable] как b ON a.UserID = b.UserID WHERE InsertedDate = MAX (InsertedDate) группа по имени пользователя.

но выдает ошибку в sql server 2008.

Ответы [ 4 ]

3 голосов
/ 07 сентября 2011

Измените ваш запрос на:

SELECT a.Username, b.StoryName 
FROM [dbo].[UserTable] as A 
INNER JOIN [dbo].[StoryTable] as b ON a.UserID = b.UserID 
WHERE b.InsertedDate = 
      (SELECT MAX(InsertedDate) FROM [StoryTable] AS z WHERE z.UserID = A.UserID)

Отредактировано согласно комментарию:

SELECT a.Username, b.StoryName 
FROM [dbo].[UserTable] as A 
INNER JOIN [dbo].[StoryTable] as b ON a.UserID = b.UserID 
WHERE b.StoryID = 
      (SELECT MAX(z.StoryID) FROM [StoryTable] AS z WHERE z.UserID = A.UserID)
1 голос
/ 07 сентября 2011
SELECT Top 1 a.Username, b.StoryName 
FROM [dbo].[UserTable] as A 
INNER JOIN [dbo].[StoryTable] as b ON a.UserID = b.UserID 
order by b.InsertedDate desc
0 голосов
/ 07 сентября 2011

MAX - это агрегатная функция, для фильтрации с использованием агрегатной функции необходимо использовать ключевое слово HAVING вместо WHERE

0 голосов
/ 07 сентября 2011

Вы можете сделать это

SELECT       u.Username, s.StoryName
FROM         [dbo].[UserTable] AS u
CROSS APPLY  (SELECT TOP 1 StoryName  
              FROM         [dbo].[StoryTable] AS ss
              WHERE        ss.UserID = u.UserID 
              ORDER BY     ss.InsertedDate DESC
             ) AS s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...