#sql #oracle9i
#sql #oracle9i
Вопрос:
Предположим, у меня есть 3 набора записей
key1 start_date1 start_date2 start_date3
701 08-SEP-2009 08-DEC-2009 08-jan-2010
701 08-JUN-2013 08-SEP-2013 08-DEC-2013
701 08-MAR-2017 08-MAR-2018 31-DEC-1899
Итак, мне нужно получить количество измененных дат, большее, чем 14-apr-2011
.
т. е. для конкретного ключа 701
количество измененных дат равно 5
т.е. для 3-х наборов строк даты, превышающие 14-Apr-2011
, имеют 5 отсчетов.
Мне нужно получить вывод таблицы с двумя полями в виде
Key1 changedcount
701 5
Пожалуйста, помогите мне в этом .. я пытался сделать это более 2 дней : (
Комментарии:
1. Как вы получаете количество 5 из приведенного выше набора результатов ..?
Ответ №1:
вы могли бы попробовать что-то вроде следующего :
SELECT SUM(nb)
FROM (SELECT COUNT(*) nb FROM your_table WHERE start_date1 > '14-Apr-2011'
UNION ALL
SELECT COUNT(*) nb FROM your_table WHERE start_date2 > '14-Apr-2011'
UNION ALL
SELECT COUNT(*) nb FROM your_table WHERE start_date3 > '14-Apr-2011')
Ответ №2:
SELECT
key1,
COUNT(CASE WHEN start_date1 > '14-Apr-2011' THEN 1 ELSE NULL END)
COUNT(CASE WHEN start_date2 > '14-Apr-2011' THEN 1 ELSE NULL END)
COUNT(CASE WHEN start_date3 > '14-Apr-2011' THEN 1 ELSE NULL END) AS changedcount
GROUP BY key1
FROM atable