各位程序员,
我有一张桌子,其中有以下列:
[tablename - usertimes]
id - int(11)
user_id - int(11)
time - timestamp
deleted - tinyint(1)
想象一下我有以下几行:
[id] [user_id] [time] [deleted]
------------------------------------------
1 1 2013-02-25 16:40 0
2 1 2013-02-25 14:40 0
3 1 2013-02-25 11:20 1
4 1 2013-02-26 11:20 1
5 2 2013-02-23 16:40 0
6 2 2013-02-25 16:40 0
现在我需要按date(
时间分组)
,user_id
其中min(
时间)
我有删除的最短时间不是假的。但!!!如果该日期的唯一行已删除=true,则必须返回该行。所以它必须返回以下行:
[id] [user_id] [time] [deleted]
------------------------------------------
2 1 2013-02-25 14:40 0
4 1 2013-02-26 11:20 1
5 2 2013-02-23 16:40 0
6 2 2013-02-25 16:40 0
最好的方法是什么?我应该只获取所有行并在我的代码中检查它们吗?我相信对此必须进行查询,但我无法理解它。
编辑:
有人可以玩这个小提琴吗?: http ://sqlfiddle.com/#!2/4f91a
它具有表格内容和所需的输出注释。
编辑2:
这是根据这个小提琴的输出:http ://www.sqlfiddle.com/#!2/3808b/1
| ID | USER_ID | DELETED | TIME |
---------------------------------------------
| 1 | 1 | 0 | 2013-02-25 14:40 |
| 4 | 1 | 1 | 2013-02-26 11:20 |
| 5 | 2 | 0 | 2013-02-23 16:40 |
| 6 | 2 | 0 | 2013-02-25 16:40 |
这真的很接近我想要实现的目标。因为我想要实现的是这个结果 ,请注意第一个 id:
| ID | USER_ID | DELETED | TIME |
---------------------------------------------
| 2 | 1 | 0 | 2013-02-25 14:40 |
| 4 | 1 | 1 | 2013-02-26 11:20 |
| 5 | 2 | 0 | 2013-02-23 16:40 |
| 6 | 2 | 0 | 2013-02-25 16:40 |