SQL Выберите строки, которые имеют более высокое значение метки времени - PullRequest
3 голосов
/ 17 мая 2011

На сервере PostgreSQL у меня есть следующая таблица:

+------+------+------------------+
| Code |  kind|    timestamp     |
+------+------+------------------+
|  1   |  I   | 16-05-2011 09:17 | 
|  1   |  O   | 16-05-2011 09:47 | 
|  2   |  I   | 16-05-2011 09:37 | 
|  3   |  I   | 16-05-2011 11:26 | 
|  3   |  O   | 16-05-2011 12:11 |
|  3   |  I   | 16-05-2011 13:23 |
+------+------+------------------+

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

Есть ли способ получить строку типа «I», у которой нет соответствующего «O»? Могу ли я сделать это с помощью одного запроса?

Код представляет собой код человека ...

Ответы [ 2 ]

5 голосов
/ 17 мая 2011

LEFT JOIN - это один из способов сделать это с

SELECT 
       t.Code,
       t.kind,
       t.timestamp 
FROM   table t 
       LEFT JOIN table t2 
         ON t.code = t2.code 
            AND t.kind = 'I' 
            AND t2.kind = 'O' 
WHERE  t2.code IS NULL 

Это также можно сделать с Not Exists

0 голосов
/ 17 мая 2011

Предполагая, что Code - человек, вы можете преобразовать kind I и O в числа +1 и -1, затем выбрать SUM (код * вид), сгруппированный по Code, с суммой, отличной от нуля.

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