Ответ 1
SELECT min(concat(Y,M,D)) FROM TableName
Я понятия не имею, как найти самую нижнюю строку в типе даты
Я просто найду самый низкий месяц (по годам в таблице)
TableName
Id | M | D | Y |
=======================
1 | 01 | 22 | 2012 |
2 | 11 | 29 | 2012 |
3 | 12 | 30 | 2013 |
4 | 01 | 30 | 2011 | <--- this !
5 | 12 | 14 | 2012 |
PHP:
$sql = "SELECT * FROM TableName WHERE M=?? AND Y=??";
$selected = mysql_query($sql);
поэтому $selected
даст результат как "4/01/30/2011" (Id, M, D, Y)
Любые?
SELECT min(concat(Y,M,D)) FROM TableName
Просто используйте предложения ORDER BY
:
SELECT * FROM TableName
ORDER BY Y ASC, M ASC, D ASC
Дополнительная информация здесь: http://www.tizag.com/mysqlTutorial/mysqlorderby.php
Пожалуйста, сделайте себе одолжение и используйте поле date
вместо этого. Вы сэкономите массу неприятностей.
ALTER TABLE `TableName` ADD `date` DATE NOT NULL;
UPDATE `TableName` SET `date` = CONCAT( `Y` , '-', `M` , '-', `D` );
то вы сможете:
SELECT MIN(`date`) FROM `TableName`
user1533609 ответ даст вам правильный результат:
SELECT min(concat(Y,M,D))
FROM `TableName`
но это не сможет использовать какой-либо индекс, который у вас есть в любом из составных полей даты, поэтому вам нужно будет посетить каждую строку таблицы, чтобы определить минимальное значение.
Сочетание ответов m4t1t0 и koopajah дает вам:
SELECT *
FROM `TableName`
ORDER BY Y, M, D
LIMIT 1
Это позволит использовать доступный индекс на Y и, возможно, даже комбинированный индекс на (Y, M, D), который может работать намного быстрее в больших таблицах.
Все это сказано; Это почти криминал, чтобы ответить на этот вопрос, который не предполагает использование поля даты вместо трех настроек столбца. Единственная причина, по которой я могу думать о разделении столбца даты, - это производительность для нишевых запросов, для которых требуются отдельные индексы в день или месяц, но выбор принятого ответа подсказывает мне, что это не так.
Как указал Люциус.. Если это дата, сохраните ее как дату и запустите:
SELECT MIN(`DateColumnName`) FROM `TableName`
В качестве бонуса это даст вам доступ ко всем функциям MySQL Temporal в столбце, включая возможность извлечения дня и месяца, отформатировать его, как вам нравится, и одно поле для индексации и упорядочивания.
Просто выполните упорядочение запросов по годам, месяцам и дням и ограничьте результат до первой строки.
SELECT * FROM TableName ORDER BY Y, M, D ASC limit 1;
Попробуйте следующее:
SELECT MIN(ColumnName) FROM TableName;
В вашем случае это будет:
SELECT MIN(Y) FROM TableName;
Я даю вам некоторую идею для вашего запроса. Пожалуйста, следуйте этому:
$sql="SELECT * FROM tbl_name ORDER BY Y, M, D ASC limit 1;
$res=mysql_query($sql);
$row=mysql_fetch_array($res);
$date=$row["id"]."/".$row["M"]."/".$row["D"]."/".$row["Y"];
echo $date;
Я надеюсь, что это поможет вам
SELECT concat(Y,M,D) FROM TableName
ORDER BY Y ASC, M ASC, D ASC
Limit 1
Таким образом, вы можете вернуть всю строку, заменив "concat (Y, M, D)" на * и легко адаптируясь для разных вариантов использования. Вы можете, например, верните последнюю строку даты в течение первого года:
SELECT * FROM TableName
ORDER BY Y ASC, M DESC, D DESC
Limit 1
Сохранение как DATETIME и использование родной сортировки MySQL ускоряет его. Если вам нужно сохранить отдельные значения (по какой-либо причине, например, импорт/экспорт с другими системами из вашей области), возможно, вы можете просто добавить другое значение в таблицу и синхронизировать значения?