DATEDIFF против (w1.date = w2.date +1) разницы? MySQL синтаксис - PullRequest
2 голосов
/ 21 января 2020

Я работал над вопросом SQL в базе данных, используя MySQL. Цель состоит в том, чтобы найти все идентификаторы, которые удовлетворяют сегодня теплее, чем вчера. Я покажу вам мой оригинальный код, который прошел 2 из 3 тестовых случаев, а затем пересмотренный код, который удовлетворяет всем 3.

В чем функциональная разница между этими двумя? Это MySQL вещь, код leetcode или что-то еще?

Оригинал

SELECT DISTINCT w2.id
FROM weather w1, weather w2
WHERE w2.RecordDate = w1.RecordDate +1 AND w2.temperature > w1.temperature

Пересмотренный

SELECT DISTINCT w2.id
FROM weather w1, weather w2
WHERE DATEDIFF(w2.RecordDate,w1.RecordDate) =1 AND w2.temperature > w1.temperature

Единственное отличие заключается в использовании DATEDIFF или использование w2.recordDate = w1.recordDate + 1.

Я хотел бы знать, в чем разница между этими двумя?

Редактировать: вот проблема L C https://leetcode.com/problems/rising-temperature/

1 Ответ

2 голосов
/ 21 января 2020

Это не делает то, что вы хотите:

w2.RecordDate = w1.RecordDate + 1

Поскольку вы используете числовую арифметику для даты, это выражение неявно преобразует даты в числа, добавляет 1 к одному из них, а затем сравнивает результаты. В зависимости от точных дат, это может работать иногда , но это просто неправильный подход. Например, скажем, ваша дата '2020-01-31', тогда добавление к ней 1 даст целое число 20200132.

MySQL понимает арифметику даты, поэтому я бы использовал:

w2.RecordDate = w1.RecordDate + interval 1 day
...