2013-12-26 6 views
0

Я хочу выбрать данные, которые были вставлены последние 5 дней, а если строки отсутствуют в этот день, то перейдите к предыдущему дню, но он всегда должен возвращать строки за последние 5 дней.MySQL - Выберите последние данные, которые были добавлены последние 5 дней. Пропустить последние записи за 44 дней.

Столбец, который я пытаюсь соответствовать столбец DATETIME

Я попытался с помощью этого запроса

select * from `thum_{ROH}` where date >= NOW() - INTERVAL 5 DAY; 

Теперь это возвращаемые данные от 2013-12-24 до 2013-12- 22, поскольку данные на 2013-12-25 и 2013-12-26 недоступны.

Как я могу изменить запрос, чтобы он возвращал последние данные за 5 дней независимо от отсутствующих строк. Так что в этом случае она будет возвращать данные, вставленные на

2013-12-24 
2013-12-23 
2013-12-22 
2013-12-19 
2013-12-12 

Дней, которые отсутствуют в период между датами выше просто не имеет ни одной строки, связанную с ними, чтобы они не будут возвращены.

Я также попытался с помощью

select distinct(date(date)), power from `thum_{ROH}` limit 5; 

Но это только выбирает некоторые значения в определенную дату, а скачет на остальных. Я имею в виду, что в каждый день имеется около 30 или более строк, поэтому указанный выше запрос возвращает только 2 или 3 строки в день.

Надеюсь, мой вопрос имеет смысл. Я пытался найти решение без каких-либо успехов. Пожалуйста, предоставьте какой-либо совет о том, как я могу это достичь. Буду признателен за любую помощь.

Заранее спасибо, Maxx

EDIT

Вот структура таблицы в вопросе.

+-----------------+------------------+------+-----+---------+-------+ 
| Field   | Type    | Null | Key | Default | Extra | 
+-----------------+------------------+------+-----+---------+-------+ 
| thumType  | int(11)   | NO | PRI | 0  |  | 
| timestamp  | int(10) unsigned | NO | PRI | 0  |  | 
| rune   | char(15)   | YES |  | NULL |  | 
| date   | datetime   | YES |  | NULL |  | 
| destruction  | decimal(15,2) | YES |  | NULL |  | 
| restoration  | decimal(15,2) | YES |  | NULL |  | 
| conjuration  | decimal(15,2) | YES |  | NULL |  | 
| alteration  | decimal(15,2) | YES |  | NULL |  | 
| illusion  | int(10) unsigned | YES |  | NULL |  | 
| power   | decimal(15,2) | YES |  | NULL |  | 
| magicka   | decimal(15,2) | YES |  | NULL |  | 
| health   | decimal(15,2) | YES |  | NULL |  | 
+-----------------+------------------+------+-----+---------+-------+ 
+0

вы могли бы включать в себя описание таблицы (т.е. столбцы, типы)? – davesnitty

+0

Имеет ли каждый день только один ряд? – jterry

+0

жаль, что я забыл добавить столовую структуру в моем оригинальном вопросе. Я добавил таблицу, теперь проверяю раздел редактирования – Maxx

ответ

2

Вы можете сделать это с помощью join:

select t.* 
from `thum_{ROH}` t join 
     (select distinct date 
     from `thum_{ROH}` 
     order by date desc 
     limit 5 
    ) as date5 
     on t.date = date5.date; 

Eidt:

Вышеуказанные работы, если мы предположим, что нет времени компонента.

Мы можем решить эту проблему, выполнив:

select t.* 
from `thum_{ROH}` t join 
     (select distinct date(date) as thedate 
     from `thum_{ROH}` 
     order by date desc 
     limit 5 
    ) as date5 
     on date(t.date) = date5.thedate; 
+0

Я думаю, вы могли бы означать 't.date> = date5.date 'но да, это должно это сделать. –

+0

@lc. , , , Не совсем. Если есть компонент времени, тогда 5 значений могут быть недостаточными. См. Редактирование. –

+0

Wow работает как шарм! Я не могу поблагодарить вас, насколько это мне помогло. Еще раз спасибо . :-) – Maxx

0

Если предположить, что в столбце «дата» имеет дату типа, то мы можем решить эту проблему с помощью подзапроса, чтобы получить 5 последних непустые даты, а затем выбрать только строки из этих дней.

SELECT * 
FROM tablename 
WHERE date IN (
    SELECT distinct date FROM tablename ORDER BY date DESC LIMIT 5 
) 
+0

Спасибо за ответ.Тип столбца - это datetime, поэтому я слегка изменил приведенный выше запрос SELECT * FROM 'thum_ {ROH}' WHERE date (date) IN (SELECT отличная дата (дата) FROM 'thum_ {ROH}' ORDER BY date (date) DESC ПРЕДЕЛ 5); Но я получаю сообщение об ошибке ERROR 1235 (42000): Эта версия MySQL еще не поддерживает «LIMIT & IN/ALL/ANY/SOME subquery» – Maxx

Смежные вопросы