2016-09-01 3 views
-1

У меня в настоящее время возникают проблемы с MySQL. Я пытаюсь получить самый большой «конец», где конец < = группа времени по времени. В настоящее время я с помощью:MySQL MAX CASE WHEN and GROUP К

SELECT 
timestart, 
timeend, 
MAX(num), 
MIN(start) as start, 
(case when MAX(end)<=timeend then MAX(end) end) AS end, value 
FROM table 
GROUP BY timeend 

Таблица, как показано ниже: (как вы можете видеть, когда значение равно нулю, конец больше timeend)

timestart  timeend  num  start    end   value 
08/15 09:46 | 08/15 10:07 | 1 | 08/15 09:48:33 | 08/15 09:48:49 | 15.3 
08/15 09:46 | 08/15 10:07 | 2 | 08/15 09:48:55 | 08/15 09:49:11 | 15.3 
08/15 09:46 | 08/15 10:07 | 3 | 08/16 08:00:00 | 08/16 08:00:00 | 
08/15 09:46 | 08/15 10:07 | 4 | 08/16 08:00:00 | 08/16 08:00:00 | 
08/15 09:46 | 08/15 10:07 | 5 | 08/16 08:00:00 | 08/16 08:00:00 | 
08/15 09:46 | 08/15 10:07 | 5 | 08/15 10:03:20 | 08/15 10:03:35 | 15.3 
08/15 09:46 | 08/15 10:07 | 6 | 08/15 10:03:42 | 08/15 10:03:57 | 15.3 
08/15 09:46 | 08/15 10:07 | 7 | 08/15 10:04:02 | 08/15 10:04:18 | 15.3 
08/15 09:46 | 08/15 10:07 | 8 | 08/15 10:04:23 | 08/15 10:04:38 | 15.3 
08/15 09:46 | 08/15 10:07 | 9 | 08/15 10:04:43 | 08/15 10:04:59 | 15.3 
08/15 09:46 | 08/15 10:07 | 10 | 08/15 10:05:04 | 08/15 10:05:19 | 15.3 
08/15 09:46 | 08/15 10:07 | 11 | 08/15 10:05:24 | 08/15 10:05:40 | 15.3 
08/15 09:46 | 08/15 10:07 | 12 | 08/15 10:05:45 | 08/15 10:06:00 | 15.3 
08/15 09:46 | 08/15 10:07 | 13 | 08/15 10:06:05 | 08/15 10:06:20 | 15.3 

Result 
08/15 09:46 | 08/15 10:07 | 13 | 08/15 09:48:33 | NULL | 15.3 

The Result I expect: 
08/15 09:46 | 08/15 10:07 | 13 | 08/15 09:48:33 | 08/15 10:06:20 | 15.3 
+1

timestart, timeend, начало, конец datatype является varchar в базе данных? –

+0

Итак, данные не так, как описано выше. Очень смущает. :-( – Strawberry

ответ

0
SELECT 
    timestart, 
    timeend, 
    MAX(num) as num, 
    MIN(start) as start, 
    MAX(end) as end, 
    value 
FROM table 
WHERE end <= timeend 
GROUP BY timestart, timeend 
+0

Ничего себе, это работает! СПАСИБО! Но все же я не совсем понимаю, почему, можете ли вы это объяснить? СПАСИБО LOT! – CodingNuts

+0

Условие WHERE гарантирует, что end <= timeend, а max (end) вернет вас конец в области SELECTION. SELECTION не такой же, как SELECT - см .: http://stackoverflow.com/questions/1031076/what-are-projection-and-selection –