2012-03-23 2 views
0

Это может быть простой, но так как у меня нет много знаний о MySQL я не знаю, как это сделать, это то, что я в принципе хочу,получить наиболее близкое значение из таблицы тузд

I есть запрос, как этот

// формат времени «гггг-ММ-дД»

SELECT ID 
FROM `id_table` 
WHERE time > "2012-01-05 " AND time < "2012-01-10"; 

Но в id_table у меня есть данные только до 2012-01-04 затем снова начинается с «2012- 01-20 ", поэтому выше запрос возвращает null. Есть ли способ, где я могу получить последнюю запись данных из таблицы, так как для этого примера я могу получить идентификатор 2012-01-04 даты из таблицы, когда я запрашиваю как этого

SELECT ID 
FROM `id_table` 
WHERE time > "2012-01-05" 
+0

Был бы SELECT id, date FROM id_table ORDER BY time DESC LIMIT 1 работает? Вероятно, можно использовать некоторый код приложения, чтобы проверить, вернул ли ваш первый запрос 0 результатов, а затем, если это так. – Corbin

ответ

3

Вы ищет один (я предполагаю max ID) ID строки с ближайшим time до 2010-01-05?

SELECT MAX(ID) as LastId FROM id_table 
WHERE time = (SELECT MAX(time) 
       FROM id_table WHERE time < '2012-01-05') 
0

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

SELECT ID FROM id_table 
WHERE time between 
    least((select max(time) from id_table), "2012-01-05") AND "2012-01-10"; 

Обратите внимание, что between будет получать данные из "2012-01-10" and ("2012-01-05" OR "2012-01-05)

0

Чтобы получить запись ближе к заданному времени (вы можете легко настроить этот параметр, если вы заботитесь о решении дубликатов, если это не имеет значения, тогда этого было достаточно)

SELECT 
    ID 
FROM 
    id_table 
ORDER BY ABS(DATEDIFF(time, '2012-01-05')) 
LIMIT 1 

ПРИМЕЧАНИЕ. Если поле времени представляет собой значение времени yyyy-mm-dd hh: mm: ss, вы можете использовать TIMEDIFF для более точного сравнения.

OP Если вы расскажете больше о том, как вы хотите обрабатывать разные случаи, я могу настроить этот пример в соответствии с ними. Приветствия.

+0

+1 Это будет работать, даже если есть точное совпадение. И если OP требует только записей до указанной даты, он может добавить предложение where или удалить абсолютное значение. –

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