在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'排? 我可以用一个查询吗?
代码代表人员代码......
答案 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(代码*种类),总和不为零。