2010-11-12 3 views
0

HI GuysПроблемы с Группой пункта

У меня есть таблица, как сильфон один

SurveyID(uniqueidentifier) PKey,UserID(uniqueidentifier),Time(DateTime) 

Я могу быть продублирован для UserID и Время взятые как текущее время, когда мы вставляем запись к столу.

Я должен выбрать последний вставленный recrod для каждого пользователя.

Все мои запросы терпят неудачу. Любая помощь по этому поводу?

Благодаря Пачка

ответ

1
SELECT u1.* 
FROM Users u1 
WHERE NOT EXISTS 
    (SELECT * 
    FROM Users u2 
    WHERE u1.ID = u2.ID AND u2.Date > u1.Date) 
+0

HI я могу иметь более одного пользователя в той же таблице. Мне нужно получить последнюю вставленную запись для каждого пользователя. Предыдущий запрос не будет работать. – Tutu

+0

Я отредактировал сообщение, я пропустил ID часть –

0
WITH rows AS (
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY [Time] DESC) AS __ROW, 
     SurveyID, 
     PKey, 
     UserID 
    FROM yourTable 
) 
SELECT SurveyID, PKey, UserID 
FROM rows 
WHERE __ROW = 1; 

Это будет работать в Oracle и SQL Server. Не уверен в MySQL или Postgres. Он не будет работать в Access. Double-underscore __ROW - это просто соглашение об именах, которое я иногда использую.

0
select * from 
(
select *, row_number() over(partition by userid order by time desc) as sno from users 
) as t 
where sno=1 
+0

Эй Это работает для меня. благодаря – Tutu

0

SELECT * от пользователей где время В
(SELECT макс (Time) от пользователей GROUP BY USERID)