2013-02-23 64 views
2

研究員程序員,一些,如果條件

我有一個表,我有以下欄目奇怪查詢:

[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

它有表內容和所需的輸出註釋。

EDIT2:

這是根據該提琴輸出: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 | 

回答

2

我不知道你在做什麼的挫折感,但這種查詢給你你的結果

select ut.* 
from usertimes ut 
join (
select user_id,deleted, min(time) as time 
from usertimes 
group by date(time), user_id, deleted 
) a on a.user_id = ut.user_id and a.time = ut.time 
group by ut.user_id, date(ut.time) 
order by ut.user_id 
0

試試這個SQL Fiddle

(
SELECT id,user_id,deleted,min(time) as TIME 
FROM usertimes 
WHERE deleted=0 
GROUP BY date(time), user_id 
) 
UNION 
(
SELECT id,user_id,deleted,time FROM(
SELECT *,COUNT(user_id) as cnt_user_id 
FROM usertimes GROUP BY user_id,date(time) 
)a 
WHERE a.deleted=1 and a.cnt_user_id =1 
)ORDER BY user_id 
+0

該查詢幾乎返回正確的結果,除了ID:1,這必須是ID:2,因爲我t是該用戶在該日期的最早時間。 – 2013-02-23 06:36:24

+0

我編輯了我的答案,你能否改變你的查詢來滿足我的需求? – 2013-02-23 07:06:20

+0

工作..這真的很有趣..感謝指出這:) – 2013-02-23 07:11:50