2016-06-27 4 views
0
Table T1: 
Column T1A 
Column insertdate (TIMESTAMP(6), indexed) 
Column T1B 

Table T2: 
Column T1B 
Column T2name 
Column T2C 

Table T3: 
Column T2C 
Column T3name 

Select T1A, count(0) 
from T1 
where (insertdate between trunc(sysdate) - 2 and trunc(sysdate) - 1) group by T1A; 

Производит подсчет вчерашних записей в T1 для каждого значения T1A.Oracle SQL-запрос для объединения столбцов из нескольких таблиц и подсчета с использованием группы по

Select tbl2.T2name, tbl3.T3name 
from T2 tbl2, T3 tbl3 
where tbl2.T1B in (select tbl1.T1A from T1 tbl1 
        where (insertdate between trunc(sysdate) - 2 and trunc(sysdate) - 1) 
        group by T1A) 
and tbl2.T2C = tbl3.T2C; 

Возвращает имена столбцов в T2 и T3, которые сопоставляются значениям в столбце T1A.

Теперь я хочу объединить два, поэтому первый запрос содержит имена вместо поля ключа (T1A), которое не имеет смысла для читателя: Report T2name, T3name, счетчик вчерашних записей в T1 для каждого значения T1A.

Очевидно, что это не настоящие имена таблиц и столбцов. Если я ошибся в синтаксисе, пожалуйста, игнорируйте, поскольку он не был запущен как есть. Все предложения приветствуются.

+1

Пожалуйста, прочитайте справку о создании [mcve] – ninesided

+0

Ваш запрос не производит подсчет вчерашних записей, она производит подсчет записей из двух дней назад. Если вам нужны вчерашние записи, предложение where должно быть «... между trunc (sysdate) - 1 и trunc (sysdate)». Кроме того, вопрос для вас: если в записи есть временная часть отметки времени ровно 00: 00: 00.000000, должна ли она учитываться как днем ​​до, так и на следующий день? Использование 'между ', как и вы, будет иметь такой результат. (Или это гарантирует, что такое значение никогда не произойдет в реальной жизни?) – mathguy

+0

Проблема, как заявлено, кажется, не имеет большого смысла. Разумно спросить T2name, если T1B является первичным ключом в таблице T2 и внешним ключом в таблице T1. Но какова связь между T2 и T3 (вдоль столбца T2C?) Если, как кажется логичным, T2C является первичным ключом в T3 и внешним ключом в T2, может быть более одного значения T2C (и, следовательно, T3name) для каждого T2name - в противном случае, почему есть отдельная таблица T3 и не имеет T3name непосредственно в T2? И если действительно может быть более одного T3name для каждого T2name, то что вы хотите в своем выходе? – mathguy

ответ

0
SELECT tbl2.T2name, tbl3.T3name, count(*) 
FROM T1 tbl1, T2 tbl2, T3 tbl3 
WHERE tbl1.T1B = tbl2.T1B 
AND tbl2.T2C = tbl3.T2C 
AND tbl1.insertdate >= trunc(sysdate) - 2 
AND tbl1.insertdate < trunc(sysdate) - 1 
GROUP BY tbl2.T2name, tbl3.T3name; 
+0

Блестящий. Работала красиво, спасибо. PS. Мои исходные вычитания даты были правильными, так как сценарий всегда будет запущен на следующий день. – user3722575

Смежные вопросы