#sql #apache-drill
#sql #apache-drill
Вопрос:
Ниже приведен SQL-запрос, который отфильтровывает записи на основе поля даты в предложении WHERE. У меня есть два разных атрибута даты.
SELECT * FROM MY_TABLE WHERE DATE1 >= '2002-01-01' OR DATE2 >= '2002-01-01';
Этот SQL выдает ошибку чтения данных. Но когда я заменяю на OR
with AND
, он работает нормально.
Как мне фильтровать записи, чтобы выбрать любую запись, у которой любая из дат больше некоторой произвольной даты?
ПРАВКА1
Я чувствую, что мои вопросы были довольно неполными. Я использую механизм запросов apache drill. Кроме того, фактический запрос представляет собой объединение двух таблиц с 2 столбцами даты, расположенными в двух разных объединенных таблицах, как показано ниже
SELECT
A.id AS my_id,
B.is_active is_active,
C.other_id AS id2
FROM
A
INNER JOIN B ON A.id = B.id
INNER JOIN C ON C.id = A.id
WHERE
A.date >= '2002-01-01' OR
B.date >= '2002-01-01';
ПРАВКА2
Ниже приведено мое сообщение об ошибке
SQL Error: DATA_READ ERROR: The JDBC storage plugin failed while trying setup the SQL query.
Комментарии:
1. У вас есть столбцы date1 и date2 в вашей таблице?
2. Вероятно, вам следует использовать литералы даты.
'2002-01-01'
является строкой, аDATE '2002-01-01'
является датой. Однако в вашей СУБД это может отличаться или может просто не иметь значения. Какую СУБД вы используете?3. @a_horse_with_no_name отредактировал мой вопрос
4. @ThorstenKettner готово
5. кроме того, это таблицы postgresql
Ответ №1:
Ну, я попробовал несколько предложенных вещей, таких как преобразование типа данных и использование правильных литералов даты, но ничего из этого не сработало. Но если я полностью удалю 3-ю таблицу из запроса, это сработает. Не уверен, почему это так, но я всегда могу присоединиться к третьей таблице после создания временной таблицы, поэтому я думаю, что это решает мою проблему. В основном запрос, который сработал, приведен ниже:
SELECT
A.id AS my_id,
B.is_active is_active
FROM
A
INNER JOIN B ON A.id = B.id
WHERE
A.date >= '2002-01-01' OR
B.date >= '2002-01-01';
Комментарии:
1.
AND
выбирает меньше строк, чемOR
. Возможно, некоторые из этих дополнительных строк находятся в секторе на диске, который по какой-то причине недоступен для чтения. Удалив таблицу из запроса, вы, возможно, удалили именно те строки, в которых есть эта проблема. (Если это правда, то сообщение об ошибке странное. Вместо сообщения об ошибке синтаксического анализа — вот как я интерпретирую это сообщение — система должна сообщить об ошибке во время выполнения.)2. да, я тоже не понял, что означает сообщение об ошибке. Но, спасибо, это хорошее представление о том, что здесь происходит! @ThorstenKettner