Я столкнулся проблемы, пытаясь закодировать следующий запрос:ROWNUM и DISTINCT в оракула
SELECT id,
contractnumber,
partyid,
entity,
product,
fecha
FROM (
SELECT DISTINCT (contractdet.id),
contractdet.contractnumber,
contractdet.partyid,
contractdet.entity,
contractdet.product,
contractdet.fecha,
ROWNUM AS rnumber
FROM contractdet
INNER JOIN contractcust ON contractcust.contractdet_id = contractdet.id
INNER JOIN customerdet ON customerdet.partyid = contractdet.partyid
WHERE TO_CHAR(contractdet.fecha, 'YYYYMM') <= TO_CHAR(ADD_MONTHS(TO_DATE(20160828, 'YYYYMMDD'), -3), 'YYYYMM')
AND contractdet.product = 'TC'
ORDER BY contractdet.id ASC
)
WHERE rnumber BETWEEN ? AND ?
ORDER BY id
я использую его в в куске кода Java для того, чтобы страницы процесса, повторите запрос и получение 1000 результатов каждый раз. Основная проблема, которую я испытываю, заключается в том, что порядок DISTINCT применяется только к интервалу I am in, а не ко всему набору результатов, поэтому он извлекает дублированные строки, когда я смешиваю вывод всех запросов, которые я сделал.
Приложить определенные усилия для форматирования запроса. –
'DISTINCT' *** НЕ *** функция. Он всегда применяется ко всем ** столбцам в вашем запросе. –
Также: 'TO_DATE (20160828, ..)' неверно. 'to_date()' ожидает, что строка ('varchar') не является числом, и вам не нужно' to_date() 'там вообще. Выражение также может быть упрощено до 'ADD_MONTHS (DATE '2016-08-28', -3)' –