Google Таблицы QUERYWHERE перестали работать

Я использую функцию Query в Google Таблицах. чтобы обобщить данные в нескольких моих электронных таблицах. Это работает хорошо в течение многих лет, хотя и медленно.

Сегодня у меня проблемы с некоторыми из моих запросов - особенно с некоторыми, которые сравнивают даты в исходных данных с TODAY().

Чтобы продемонстрировать, вот ссылка на таблицу, которой я поделился используется для воспроизведения проблемы на поддельных данных.

Изменить: пример был обновлен с учетом предложения AdamL.

введите описание изображения здесь

Исходные данные находятся в диапазоне A1:D6 со столбцами «Серийный номер», «Тип», «Местоположение» и «Срок действия гарантии». Последний столбец - это дата.

Эта функция в A9 суммирует все данные:

=query(A1:D6,"select B, count(A) group by B pivot C")

...вот так:

= query (A1: D6, select B, count (A) group by B pivot C)

Вот в чем дело. Если я попытаюсь отфильтровать с помощью WHERE и DATE(), запрос, похоже, полностью сломается. Мне нужна таблица, похожая на приведенную выше, но включающая только те строки данных, которые имеют дату в столбце D, которая находится в прошлом.

=query(A1:D6,"select B, count(A) where D < now() group by B pivot C")

= query (A1: D6, выберите B, count (A), где D‹ now () группирует по B, точка C)

Если я изменю фильтр на что-то, не связанное с датами, я получу ожидаемый результат:

= query (A1: D6, выберите B, count (A), где B = 'Mech' группа по оси B C)

Как мне получить именно то резюме, которое я хочу?


person Mogsdad    schedule 22.04.2013    source источник


Ответы (1)


скалярная функция now () возвращает значение datetime, и у вас есть дата значения в исходных данных. К сожалению, сравнения между ними не удастся. Обходной путь - преобразовать now () в значение даты:

=QUERY(A1:D6;"select B, count(A) where D < toDate(now()) group by B pivot C")


В стороне, есть ограничение (ошибка?) С функцией QUERY, в результате чего скалярная функция now () не (обязательно) работает в часовом поясе вашей электронной таблицы, и, похоже, нет никакого способа изменить это поведение. Я считаю, что скалярная функция now () всегда будет возвращать текущее время по тихоокеанскому летнему времени (например, на западном побережье США). Итак, для меня, прямо сейчас в Брисбене, Австралия, toDate (now ()), используемый в предложении выбора QUERY, возвращает вчерашнюю дату.

Более безопасный вариант - использовать функцию электронной таблицы для генерации сегодняшней даты и объединить ее в предложение QUERY:

=QUERY(A1:D6;"select B, count(A) where D < date '"&TEXT(GoogleClock();"yyyy-MM-dd")&"' group by B pivot C")

person AdamL    schedule 22.04.2013
comment
Я попробую. В моих настоящих таблицах у меня есть значения datetime, и мои запросы просто перестали работать где-то в последние несколько дней! - person Mogsdad; 23.04.2013
comment
Ах я вижу. Значения datetime должны работать, несмотря на проблему с часовым поясом. Я только что протестировал несколько, которые, казалось, были восстановлены нормально. - person AdamL; 23.04.2013
comment
Золотая Звезда! Это помогло. Похоже, они ужесточили сравнение date vs datetime. - person Mogsdad; 23.04.2013