Выберите отличное от нескольких полей, используя sql & a Date_Time col - PullRequest
1 голос
/ 10 января 2012

У меня есть таблица, которая записывает, когда пользователь входит в систему. Я хочу найти всех пользователей, которые вошли в систему в течение последнего года.

Итак, упрощенно у меня есть

|  Client_ID  |  DateLoggedIn  |
|      1      |    05/02/10    |
|      2      |    14/05/11    |
|      1      |    26/05/11    |
|      3      |    18/04/10    |
|      2      |    21/12/11    |

Я пытаюсь вернуть ClientID с самой последней датой, например:

|  Client_ID  |  DateLoggedIn  |
|      1      |    26/05/11    |
|      2      |    21/12/11    |
|      3      |    18/04/10    |

Я пытался использовать Group By и пытался присоединиться к UNION, но я думаю, что я делаю что-то не так ...

Вся помощь с благодарностью получена !!!

Спасибо, ребята:)

Ответы [ 4 ]

1 голос
/ 10 января 2012

В зависимости от используемой СУБД:

Select top 1 client_ID
From table
order by DateLoggedIn desc

или:

SELECT client 
FROM ( SELECT client_ID, 
       RANK() OVER (ORDER BY DateLoggedIn DESC) rank
       FROM table ) 
 WHERE rank = 1
1 голос
/ 10 января 2012

Это простое группирование функции агрегирования и использование необходимости ограничивать результаты.

Если X - это дата, к которой вы хотите фильтровать к тому времени

select Client_ID, max(DateLoggedIn)
    from table
    group by Client_ID
    having  max(DateLoggedIn) > X

Настройка XI, думаю, зависит отСУБД, которую вы используете

0 голосов
/ 10 января 2012

По аналогии с другой маркой:

select Client_ID, max(DateLoggedIn)
from table
where DateLoggedIn > X /* X = one year ago - derivation will be DB-dependant */
group by Client_ID
order by max(DateLoggedIn) desc
0 голосов
/ 10 января 2012
SELECT Client_ID, DateLoggedIn from TableName
GROUP BY Client_ID
Order By DateLoggedIn DESC
...