2016-07-27 2 views
-1

Относительно этого Receive range of dates. If starting dating doesn't exist fetch range from the closest past date, я столкнулся с странной проблемой.Как порядок mysql, когда псевдоним столбца и его имя совпадают?

Вот таблицы HistoryPrices так:

| Date | Price | 
|------------|-------| 
| 2015-12-25 | 44.5 | 
| 2016-01-01 | 90.5 | 
| 2016-01-03 | 50.5 | 
| 2016-01-04 | 45.6 | 
| 2016-01-10 | 40.99 | 
| 2016-01-15 | 50.5 | 
| 2016-01-22 | 50.99 | 

Когда я запустил этот запрос:

select * 
from HistoryPrices 
order by `date` desc 
limit 1; 

я получил правый ряд | 2016-01-22 | 50.99 |.

Когда я побежал это:

select '2016-01-22', Price 
from HistoryPrices 
order by `date` desc 
limit 1; 

Также правильный ожидаемый результат | 2016-01-22 | 50.99 |

И этот запрос:

select '2016-01-22' as xxx, Price 
from HistoryPrices 
order by `date` desc 
limit 1; 

Также | 2016-01-22 | 50.99 |

Однако, когда я побежал это:

select '2016-01-22' as `date`, Price 
from HistoryPrices 
order by `date` desc 
limit 1; 

Я получил этот результат | 2016-01-22 | 44.5 |. Я понятия не имею, почему это произошло. Возможно, псевдоним столбца и имя столбца совпадают с date, а затем, когда order by `date`, mysql не знает, как это сделать? Но я не могу это подтвердить.

Может ли кто-нибудь пояснить мне, пожалуйста?
Любая помощь будет оценена по достоинству. Заранее спасибо.

ответ

2

MySQL позволяет ссылаться на псевдонимы столбцов в order by. Если вы хотите, чтобы имя таблицы, то право столбца:

select '2016-01-22' as `date`, hp.Price 
from HistoryPrices hp 
order by hp.`date` desc 
limit 1; 
+0

Спасибо за столь быстрый ответ, и я знаю, что ты сказал здесь, но, как вы видели, последний запрос дал мне 44,5, как это случилось? – Blank

+0

@JPG. , , Он использует столбец, определенный в 'select'. Все строки имеют одинаковое значение, поэтому выбирается неопределенная строка. –

+0

Получил, еще раз спасибо. – Blank

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