SQL选择具有更高时间戳值的行

时间:2011-05-16 21:46:54

标签: sql postgresql

在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 |
+------+------+------------------+

此表表示具有相对时间戳的池中人员的IN和OUT,我想知道给定时刻池中的人员。

有没有办法检索没有相应'O'的'I'排? 我可以用一个查询吗?

代码代表人员代码......

2 个答案:

答案 0 :(得分:5)

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一起使用

答案 1 :(得分:0)

假设Code是一个人,您可以将kind I和O转换为数字+1和-1,然后选择按Code分组的SUM(代码*种类),总和不为零。

相关问题