powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка по дате
31 сообщений из 31, показаны все 2 страниц
Группировка по дате
    #38383963
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста как правильно группировать по дате. К примеру по часу, время хранится в unixtime, группирую таким способом
Код: sql
1.
(date_time DIV 3600)*3600+3600

. Вроде все логично, но последняя минута к примеру от 13:59 до 14:00 у меня записывается как 14:00 И соответственно уходит в другой час. Кто как с этим справляется?
Код: sql
1.
2.
3.
4.
SELECT SUM(t0.value), FROM_UNIXTIME((t0.date_time DIV 3600)*3600+3600, '%Y-%m-%d %H:%i:00')
FROM tbl_tag_data_min t0
WHERE t0.id_tag_data_Kip=88
GROUP BY (t0.date_time DIV 3600)*3600+3600
...
Рейтинг: 0 / 0
Группировка по дате
    #38384029
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
GROUP BY EXTRACT(YEAR_MONTH_DAY_HOUR FROM date_time)
...
Рейтинг: 0 / 0
Группировка по дате
    #38384058
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Ругается на YEAR_MONTH_DAY_HOUR, YEAR_MONTH отрабатывает.
Только не пойму, как это решает проблему?
...
Рейтинг: 0 / 0
Группировка по дате
    #38384150
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мадонна миа... это ж просто демонстрация, что EXTRACT никаких округлений не выполняет...
Код: sql
1.
GROUP BY CONCAT(EXTRACT(YEAR_MONTH_DAY FROM date_time), EXTRACT(HOUR FROM date_time))


Ну или от такой вариант попробуй:
Код: sql
1.
GROUP BY LEFT(FROM_UNIXTIME(date_time), 13)
...
Рейтинг: 0 / 0
Группировка по дате
    #38384176
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Я наверно туплю, но Вы делаете тоже самое что и у меня получается в итоге
Код: sql
1.
(date_time DIV 3600)*3600+3600
...
Рейтинг: 0 / 0
Группировка по дате
    #38384198
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока я вижу выход, в БД хранить с отставанием в минуту, а при выборке прибавлять эту минуту. По моему как то криво получается, но решений больше не вижу(
...
Рейтинг: 0 / 0
Группировка по дате
    #38384287
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вот так:
Код: sql
1.
GROUP BY LEFT(date_time, 13)


У тебя ж поле - типа timestamp, верно?
...
Рейтинг: 0 / 0
Группировка по дате
    #38384356
DV_RUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldar,

Или так:

Код: sql
1.
GROUP BY FROM_UNIXTIME(your_date, '%H')
...
Рейтинг: 0 / 0
Группировка по дате
    #38384645
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaА если вот так:
Код: sql
1.
GROUP BY LEFT(date_time, 13)


У тебя ж поле - типа timestamp, верно?
Нет у меня unixtime, но все равно спасибо, не знал о такой полезной функции.
DV_RUS , нет, так не пойдет.
Блин я извиняюсь, сбил вас с толку объяснив свою проблему не ненадлежащим образом. Группировка по часам у меня получается. Проблема в том, что при группировке теряется минута. Если подробнее. Имеется у меня таблица с дискретностью минута, я хочу ее агрегировать по часам. Вот к примеру час 15:00 содержит в себе сумму поминутных значений с 14:00:00.001 по 15:00:00.000 при группировке своим способом или вашим я получаю сумму поминутных значения с 14:00:00.001 по 14:59:00.000 т.е. значение одной минут теряется, с периода 14:59:00.00 по 15:00:00.000, была бы агрегация с таблицы дискретностью секунда, не обращал бы внимание на потерявшуюся секунду, внес бы ее в погрешность. Но в конкретном случае это недопустимо.Помогите советом, думаю многие сталкивались с такой ситуацией. Извиняюсь еще раз за желтый заголовок и объяснение ситуации.
...
Рейтинг: 0 / 0
Группировка по дате
    #38384667
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте скрипт создания тест-таблицы (лишние поля и дефиниции поскипать) и дамп в десяток записей (без кириллицы), включая проблемные.
...
Рейтинг: 0 / 0
Группировка по дате
    #38384670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarНет у меня unixtimeMySQL говорит , что такого типа не знает...
...
Рейтинг: 0 / 0
Группировка по дате
    #38384726
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Группировка по дате
    #38384908
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarВ таком пример виде пойдет?
Нет, блин, не пойдёт!

Код: sql
1.
create table t(id int, id_tag int, value int, date_time int);


Где тут TIMESTAMP, блин?
...
Рейтинг: 0 / 0
Группировка по дате
    #38384948
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaldarВ таком пример виде пойдет?
Нет, блин, не пойдёт!

Код: sql
1.
create table t(id int, id_tag int, value int, date_time int);


Где тут TIMESTAMP, блин?
Подождите, у меня наверно отличается представления timestamp. Это же Unixtime которое хранит в себе целое число в секундах, отсчитанное от начала эпохи UNIX т.е. 1970 г. Разве не так? Tcли я ошибаюсь, то как называть этот тип?
И соответственно у меня используется этот тип в таблицах.
...
Рейтинг: 0 / 0
Группировка по дате
    #38384963
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarПодождите, у меня наверно отличается представления timestamp. Это же Unixtime которое хранит в себе целое число в секундах, отсчитанное от начала эпохи UNIX т.е. 1970 г. Разве не так? Tcли я ошибаюсь, то как называть этот тип?
И соответственно у меня используется этот тип в таблицах.
Мой Вам совет - срочно ЗАБУДЬТЕ ВСЁ, что Вы там придумали. И читайте документацию . Сервер будет работать ТОЛЬКО со своим синтаксисом.
...
Рейтинг: 0 / 0
Группировка по дате
    #38385014
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Увы, я ничего не придумывал, время хранить в формате unix достаточно популярна. Просто тип данных под нее нужно резервировать INT. В mysql же есть функции такие как FROM_UNIXTIME(). Соответственно предусматривает работы с таким видом данных. Не понятно почему Вас это удивило.
...
Рейтинг: 0 / 0
Группировка по дате
    #38385131
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarя ничего не придумывал, время хранить в формате unix достаточно популярна. Просто тип данных под нее нужно резервировать INT. В mysql же есть функции такие как FROM_UNIXTIME(). Соответственно предусматривает работы с таким видом данных. Не понятно почему Вас это удивило.
Ага, а ссылку на документацию я тебе давал так, чисто поржать...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385162
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, ну а в чём ldar ошибается?
ldarПодождите, у меня наверно отличается представления timestamp. Это же Unixtime которое хранит в себе целое число в секундах, отсчитанное от начала эпохи UNIX т.е. 1970 г. Разве не так?вот тут вроде то же самое говорится. Не учитывая, конечно, нюансы с таймзонами...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385423
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirв чём ldar ошибается?
Абсолютно во всём.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
mysql> create table test(field timestamp);
Query OK, 0 rows affected (0.19 sec)

mysql> insert into test values (12345678);
ERROR 1292 (22007): Incorrect datetime value: '12345678' for column 'field' at row 1
mysql> insert into test values ('2013-01-01 01:02:03');
Query OK, 1 row affected (0.02 sec)

mysql> select * from test;
+---------------------+
| field               |
+---------------------+
| 2013-01-01 01:02:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.05 sec)

mysql> create table test(field int);
Query OK, 0 rows affected (0.22 sec)

mysql> insert into test values (12345678);
Query OK, 1 row affected (0.03 sec)

mysql> insert into test values ('2013-01-01 01:02:03');
ERROR 1265 (01000): Data truncated for column 'field' at row 1
mysql> select * from test;
+----------+
| field    |
+----------+
| 12345678 |
+----------+
1 row in set (0.00 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.05 sec)


Ещё вопросы будут?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385495
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, а если так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> create table test (field int);                                 
Query OK, 0 rows affected (0.31 sec)                                  
                                                                      
mysql> insert into test values(1378204647);                           
Query OK, 1 row affected (0.02 sec)                                   
                                                                      
mysql> SELECT FROM_UNIXTIME(field,'%Y-%m-%d %H:%i:%s') FROM test;     
+------------------------------------------+                          
| FROM_UNIXTIME(field,'%Y-%m-%d %H:%i:%s') |                          
+------------------------------------------+                          
| 2013-09-03 16:37:27                      |                          
+------------------------------------------+                          
1 row in set (0.00 sec)                                               
                                                                      
mysql>     
...
Рейтинг: 0 / 0
Группировка по дате
    #38385543
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarAkina, а если такИ что это изменило?

Тип поля как был INT, так и остался INT. И сервер будет с ним работать как с INT, а не как с TIMESTAMP, и ему чхать с высокой колокольни, что ты считаешь это поле штампом времени.

Научись различать хранение-обработку данных и их отображение, что ли...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385608
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,Ну ладно, самое главное понял в каком виде хранится у меня время. Не подскажешь как решить мне изначальную проблему?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385661
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнительно переводи свой INT в TIMESTAMP. Функция CAST() либо CONVERT()...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, этот SQL Fiddle - выброси на помойку. Не веришь? выполни на нём и на консоли MySQL-сервера на таблице, которая в левом окне, вот такой запрос:
Код: sql
1.
SELECT *, CAST(date_time AS DATETIME) FROM t;

и сравни результаты...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385673
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу... стоп. Это уже я путаюсь... у тебя ж там INT...
...
Рейтинг: 0 / 0
Группировка по дате
    #38385691
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну-ка, глянь, вот такой запрос
Код: sql
1.
2.
3.
4.
SELECT SUM(value) Summ, CONCAT(LEFT(FROM_UNIXTIME(date_time), 13),':00:00') Hour
FROM t
WHERE id_tag=1
GROUP BY LEFT(FROM_UNIXTIME(date_time), 13);


даёт правильный с твоей точки зрения результат?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385913
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, тоже самое, что и у меня.
Скажите мне пожалуйста, может я гоню.
Вот к примеру время 12:30 при агрегации это же время относится к 13:00, не к 12:00?
Вот у меня получается время 12:01, 12:02...12:59, 13:00 это все относится к 13:00. Что получается при разных мне предложенных методах группировки, откидывать минуты. Это получается 12:00, 12:00...12:00, 13:00 , получается последняя минута теряется, т.к. 13:00 отнесется к другому часу. Я правильно понимаю?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385942
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на твоих данных мой запрос даёт
SUMMHOUR 35401970-01-01 00:00:00 601970-01-01 01:00:00 По моему разумению, именно так и должно быть...
ldarВот к примеру время 12:30 при агрегации это же время относится к 13:00, не к 12:00?Сфига бы? 12:30 относится к 12:00:00..12:25:25,(9).
ldarполучается при разных мне предложенных методах группировки, откидывать минутыСабо самой... разве может быть иначе?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385958
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaldarВот к примеру время 12:30 при агрегации это же время относится к 13:00, не к 12:00?Сфига бы? 12:30 относится к 12:00:00..12:25:25,(9).

Так так, вот здесь поподробней, 12:30 это же 12 целых часов и 30 минут 13го часа. Т.е. эти 30 минут относятся к 13му часу. Говорят даже при видя 12:30 "пол первого", соответственно эти 30 минут относятся к 13:00. Так же?
...
Рейтинг: 0 / 0
Группировка по дате
    #38385966
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ldarТак так, вот здесь поподробней, 12:30 это же 12 целых часов и 30 минут 13го часа. Т.е. эти 30 минут относятся к 13му часу. Говорят даже при видя 12:30 "пол первого", соответственно эти 30 минут относятся к 13:00. Так же?
Это пальцы ты будешь считать от 1 до 5, а время - от нуля и до 23 часов...

Программисты, помнится, в угоду бухгалтерам даже месяц нулябрь ввели, чтобы январь первым был, а вот насчёт часов или там минут - не, отстояли...
...
Рейтинг: 0 / 0
Группировка по дате
    #38386098
ldar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все теперь понятно, спасибо, здесь у меня и была зарыта собака) Спасибо и за стойкость!)
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Группировка по дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]