2016-06-08 2 views
-2

Таблица содержит следующие столбцы:SQL - Сравните 2 различные диапазоны даты

ДАННЫХ, КОД и так далее ..

мне нужно отобразить две различные диапазоны даты и его код, как:

| данные | код | данные2 | код |

Мой запроса:

SELECT DATA,CODE 
FROM people 
WHERE DATA >= ${data1} AND DATA <= ${data2} 
GROUP BY DATA 
ORDER BY DATA 

То, что я пытался сделать 2 запросов с дифферентом переменным, но как всегда возвращает один и тот же диапазон данных. Так что я сделал что-то вроде:

SELECT DATA,CODE 
FROM people 
WHERE DATA >= ${d1} AND DATA <= ${d2} 
GROUP BY DATA 
ORDER BY DATA 

и попытаться назначить 4 Дифференц датировать для того, чтобы получить 2 диапазонов периода. Представим себе data1='01-01-2001' и data2='31-12-2001', а d1='01-01-2002' и d2='31-12-2002'.
Когда я назначил даты, оба возвращают только последний диапазон.

Таким образом, вместо получения | 2001 | код | 2002 | код | У меня | 2002 | код | 2002 | код |
Мне нужно для сравнения, поэтому я хочу сравнить каждый год 2001 года слева и с каждым днем ​​2002 года справа.

+1

Пожалуйста, читать [просить]. добавить структуру таблицы, образцы данных и желаемые результаты. –

+0

ваш запрос не совпадает с именами столбцов ... –

+0

Рассмотрите синтаксис SQL RDBMS oracle: SELECT * FROM mytable WHERE (mydatefield BETWEEN TO_DATE ('2016-06-01', 'YYYY-MM-DD') и TO_DATE ('2016-06-30', 'ГГГГ-ММ-ДД')) ' – LukStorms

ответ

0

Использование переменных связывания :start1:end1 и как рамки для первого диапазона и :start2 и :end2 как границы для второго диапазона:

SELECT d1.data AS data1, 
     d1.code AS code1, 
     d2.data AS data2, 
     d2.code AS code2 
FROM (
    SELECT data, 
     code, 
     ROW_NUMBER() OVER (ORDER BY data) AS rn 
    FROM people 
    WHERE data BETWEEN :start1 AND :end1 
) d1 
FULL OUTER JOIN 
(
    SELECT data, 
     code, 
     ROW_NUMBER() OVER (ORDER BY data) AS rn 
    FROM people 
    WHERE data BETWEEN :start2 AND :end2 
) d2 
ON (d1.rn = d2.rn) 
Смежные вопросы