Моя цель похожа на следующую таблицу:
Key | Count since date X | Count total
1 | 4 | 28
С двумя простыми выборами я могу получить следующие значения: (ключ таблицы состоит из 3 столбцов [t$ncmp, t$trav, t$seqn]
)
1. SELECT COUNT(*) FROM db.table WHERE t$date >= sysdate-2 GROUP BY t$ncmp, t$trav, t$seqn
2. SELECT COUNT(*) FROM db.table GROUP BY t$ncmp, t$trav, t$seqn
Как я могу присоединиться к этим операторам?
Что я пробовал:
SELECT n.t$trav, COUNT(n.t$trav), m.total FROM db.table n
LEFT JOIN (SELECT t$ncmp, t$trav, t$seqn, COUNT(*) as total FROM db.table
GROUP BY t$ncmp, t$trav, t$seqn) m
ON (n.t$ncmp = m.t$ncmp AND n.t$trav = m.t$trav AND n.t$seqn = m.t$seqn)
WHERE n.t$date >= sysdate-2
GROUP BY n.t$ncmp, n.t$trav, n.t$seqn
Я пробовал разные варианты, но всегда получал ошибки, такие как «сгруппировано по отсутствует» или «неизвестный классификатор» , Теперь это, по крайней мере, выполняется, но общее значение всегда равно 2.
T$TRAV COUNT(N.T$TRAV) TOTAL
4 2 2
29 3 2
51 1 2
62 2 2
16 1 2
....
Если это имеет значение, я выполню это как OPENQUERY от MSSQLSERVER до Oracle -DB.