У меня есть таблица, которая хранит простые данные журнала:SQL - Держите только первую и последнюю запись каждого день
CREATE TABLE chronicle (
id INT auto_increment PRIMARY KEY,
data1 VARCHAR(256),
data2 VARCHAR(256),
time DATETIME
);
Таблицы приближающихся записи 1х, поэтому я хотел бы начать объединение данных.
Я хочу, чтобы каждый день принимал первую и последнюю запись каждого DISTINCT(data1, data2)
и удалял все остальное.
Я знаю, как просто тянуть в данных и обрабатывать его в любом языке я хочу затем удалить записи с огромным IN (...)
query, но кажется, что лучшей альтернативой будет использовать SQL напрямую (я не прав?)
Я пробовал несколько запросов, но я не очень хорошо разбираюсь в SQL за пределами JOIN.
Вот то, что я до сих пор:
SELECT id, Max(time), Min(time)
FROM (SELECT id, data1 ,data2, time, Cast(time AS DATE) AS day
FROM chronicle) AS initial
GROUP BY day;
Это заставляет меня в первый и последний раз за каждый день, но это не отделяется от данных (т.е. я получить последнюю запись каждый день, а не последняя запись для каждого отдельного набора данных за каждый день.) Кроме того, id
предназначен только для Мин (время).
Информация, которую я нашел по этой конкретной проблеме, предназначена только для поиска последней записи дня, а не для каждой последней записи для наборов данных.
ВАЖНО: Я хочу, чтобы первый/последний запись для каждого DISTINCT(data1, data2)
на каждый день, а не только первый/последний запись для каждого дня в таблице. Для каждого дня будет более двух записей.
Решение: мое решение благодаря Джонатану Даан и Гордон Линофф:
SELECT o.data1, o.data2, o.time FROM chronicle AS o JOIN (
SELECT Min(id) as id FROM chronicle GROUP BY DATE(time), data1, data2
UNION SELECT Max(id) as id FROM test_chronicle GROUP BY DATE(time), data1. data2
) AS n ON o.id = n.id;
Отсюда простой вопрос ссылки на ту же таблицу для удаления строк.
Может быть идентификаторы полагались на как последовательный?Значение id id всегда будет иметь дату/время, равное или до id 11? – Augwa
По какой причине вы хотите удалить старые записи? Это связано с плохой производительностью запросов? Или использование дискового пространства? – Augwa
@JonathanDahan они определенно не будут последовательными, так как записи удаляются. Но я думаю, что вы на самом деле означаете монотонное увеличение. Из того, что я могу сказать, mysql 'auto_increment' по умолчанию монотонно увеличивает значение, если id_a
korylprince