mySQL - показывать первый и последний журнал за каждый день

0

У меня есть таблица mysql с colums: id (primary), name (varchar), TIME (timestamp)

ID , NAME , TIME 

я хочу получить только первый и последний журнал за каждый день

example if i have data like this 

1,name,2018-20-21 12:35:00
2,name,2018-20-21 13:38:00
3,name,2018-20-21 14:25:00
4,name,2018-20-21 15:39:00
5,name,2018-20-21 21:48:00 
6,name,2018-20-22 13:25:00
7,name,2018-20-22 14:39:00
8,name,2018-20-22 19:48:00

я хочу попасть в это

 1,name,2018-20-21 12:35:00
 5,name,2018-20-21 21:48:00 

 6,name,2018-20-22 13:25:00
 8,name,2018-20-22 19:48:00
  • 0
    какая у тебя версия mysql?
  • 0
    зачем это нужно
Показать ещё 1 комментарий
Теги:

5 ответов

0
Лучший ответ

Попробуй это:

SELECT name, MAX (время), MIN (время) FROM Таблица GROUP BY DATE (время);

0

Вы можете использовать объединение для минимальной и максимальной временной группы по дате и присоединиться к ней со своей таблицей

    select * from my_table 
    inner join  (     
    select * from (
     select   min(time) my_time 
     from my_table  
     group by date(time)
     union 
     select   max(time)
     from my_table  
     group by date(time)
    ) t on t.my_time = my_table.time
    order by  my_table.time
  • 0
    # 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'on' в t.my_time = my_table.time порядке по my_table.time LIMIT 0, 25 'в строке 4
  • 0
    в моем запросе нет предела 0,25 .. поэтому вы должны использовать мой код .. и тестировать код без добавления другого кода .. +
0

Надеюсь это поможет.

SELECT id, tmp.name, tmp.time FROM
(SELECT id, name, min(time) as time FROM table1 GROUP BY DATE(time)
UNION ALL
(SELECT id, name, max(time) as time FROM table1 GROUP BY DATE(time)) tmp
ORDER BY tmp.time
0
SELECT 
    l.id,l.name,l.time
FROM
    log l
        LEFT JOIN
    (SELECT 
        max(time) as maxTime
    FROM
        log
    GROUP BY date(time)) l1 ON l.time = l1.maxTime
        LEFT JOIN
    (SELECT 
        min(time) as minTime
    FROM
        log
    GROUP BY date(time)) l2 ON l.time = l2.minTime
WHERE
    (maxTime IS NOT NULL
        OR minTime IS NOT NUll);
SELECT * from stack.log;
0

Вы можете попробовать выбрать min и max для каждого дня, так как вам нужна вся строка, требуется соединение и отфильтровать фактический минимальный и максимальный день, необходим aub-запрос

SELECT id, name, time
FROM
(

SELECT t2.*, MIN(DATE(t.time)) As min0 MAX(DATE(t.time)) As max0
FROM
 table t
 INNER JOIN table t2 ON t.id = t2.id
GROUP BY
 DATE (t.time), 
min0, 
max0
) a

Ещё вопросы

Сообщество Overcoder
Наверх
Меню