2013-08-28 4 views
2

Я пытаюсь сформулировать кажущийся простой SQL-запрос, в котором я соединяю две таблицы и заказываю результаты по разнице дат от одного из столбцов и NOW().SQL - заказ по возрастающей дате от NOW()

Я пытаюсь запрос:

SELECT advertise_id, 
     qr_startdate, 
     qr_enddate, 
     DATEDIFF(day, NOW(), t1.qr_enddate) AS d 
FROM `adv_qr` t1 
INNER JOIN advertise_table t2 
    ON t1.advertise_id = t2.lid 
ORDER BY t1.d ASC 

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

+0

Попробуйте включить столбец «день» в списке и присвоить ему псевдоним. День - это ключевое слово и может быть проблемой. Редактирование: Да, я думаю, что это должно быть датированное (сейчас(), в другой день) –

+0

Так как 'd' является псевдонимом, нужно ли ему иметь перед ним t1? Он не входит в таблицу t1 ... – Tommy

+0

@ Томми: Вы правы. Я удалил t1 в ORDER BY и SQL выполнил, когда я также использовал предложение @ Alden об использовании 'lateiff (now(), otherday)' Однако мой столбец 'd' равен' NULL'. И, конечно, это делает «ORDER BY» нерелевантным. – Brett

ответ

5
SELECT advertise_id, 
     qr_startdate, 
     qr_enddate, 
     DATEDIFF(NOW(), t1.qr_enddate) AS d 
FROM `adv_qr` t1 
INNER JOIN advertise_table t2 
    ON t1.advertise_id = t2.lid 
ORDER BY d ASC 
+1

Это сделало это! Благодаря! – Brett

0

А как насчет использования прямого вычитания?

NOW() - t1.qr_enddate 

как критерий сортировки?

1

Заканчивать this SQLFiddle:

SELECT advertise_id, 
     qr_startdate, 
     qr_enddate, 
     DATEDIFF(NOW(), t1.qr_enddate) AS d 
FROM `adv_qr` t1 
INNER JOIN advertise_table t2 
    ON t1.advertise_id = t2.lid 
ORDER BY d ASC 

Вы можете найти MySQL DATEDIFF documentation здесь.

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