Я группирую некоторые записи по их близости времени. Что я могу сделать прямо сейчас (проставлены в UnixTime),Эффективный способ разделения группы на отдельные записи
Во-первых, я сделать саб выбора, чтобы захватить записи, которые представляют интерес меня,
(SELECT timestamp AS target_time FROM table WHERE something = cool) AS subselect
Тогда я хочу посмотреть на записи, которые близки в срок до тех,
SELECT id FROM table, subselect WHERE ABS(target_time - timestamp) < 1800
Но вот где я ударил свою проблему. Мне нужны только записи, где разница во времени между записями вокруг target_time
составляет> 20 минут. Поэтому для этого я группирую target_time
и добавляю раздел HAVING
.
SELECT id FROM table, first WHERE ABS(target_time - timestamp) < 3600
GROUP BY target_time HAVING MAX(timestamp) - MIN(timestamp) > 1200
Это замечательно, и все записи, которые мне не нравятся ушли, но теперь у меня есть только первый id
группы, когда я действительно хочу все ids
. Я могу использовать GROUP_CONCAT
, но это дает мне беспорядок, я больше не могу отвечать на запросы. Мне бы хотелось, чтобы все ids
были возвращены из всех этих создаваемых групп. Нужно ли мне другое заявление SELECT
? Или есть только лучший способ структурировать то, что я получил?
Спасибо,
SQL-шишка.
Что именно вы хотите? Сначала вы говорите, что хотите сгруппировать по временному интервалу. Вы делаете это, а затем жалуетесь, что получаете только одну запись за группу, что и должна делать GROUP (и то, что вы сначала сказали, что хотите). Поэтому я немного смущен. – jira
Извините, я предполагаю, что мой первоначальный вопрос изменился, когда я написал проблему. Реальная проблема заключается в том, что мне нужно сгруппировать записи, чтобы использовать агрегированные функции для удаления некоторых, которые мне не нужны. Но тогда мне нужно де-группа? мои записи, поэтому я могу получить доступ к идентификаторам по отдельности. И я не знаю, насколько это эффективный метод. Я сделаю быстрое редактирование, спасибо. –