У меня есть даты, отформатированные как mm/yyyy
(например, 11/2018) в столбце с именем actual_date
.Мне нужно выбрать все записи, где actual_date < 2000/01/01
и actual_date > SystemDate
(или точнее CURRENT_DATE()
).На основании этого выбора я хочу рассчитать% записей, которые находятся в этой ситуации.К сожалению, actual_date
объявлено как String в базе данных, поэтому мне нужно привести его к дате.
Я искал различные решения в Интернете, но некоторые из них не применимы к BigQuery.В принципе, мне, вероятно, нужна строка кода, близкая к следующей.Тем не менее, все, что я пытаюсь, не работает.BigQuery либо не распознает функцию (например, пытался использовать CONVERT
), либо говорит, что не может сравнивать даты.
Код настроен так, потому что я рассчитываю так: Все записи - правильныеЗаписи (даты между 2000/01/01 и CURRENT_DATE ()), разделенные на все записи.Это должно дать% неправильных записей (даты ниже 2000/01/01 и выше CURRENT_DATE ()).NULL является приемлемым значением, поэтому оно включено в расчет как правильное значение.
SELECT
ROUND ((
COUNT(1) -
(SUM (CASE WHEN (actual_date IS NULL) IS TRUE THEN 1 ELSE 0 END)
+
SUM (CASE WHEN (CAST actual_date AS DATE) > 2000/01/01) THEN 1 ELSE 0 END)
+
SUM (CASE WHEN (CAST actual_date AS DATE) < CURRENT_DATE() THEN 1 ELSE 0
END)))
* 100 / COUNT(1), 3)
FROM `project.dataset.datatable`
WHERE country_code = 'country1'
Результат должен быть% от фактического_даты меньше 2000/01/01 и выше CURRENT_DATE ().