以下是我的表格和我超级迷失:
Command
noCommand date numberClient
1 01/06/2000 10
3 02/06/2000 10
Details
noLivre noCommand
100 1
100 1
101 1
100 3
103 1
Delivered
noLivre Date
100 03/06/2000
101 04/06/2000
103 05/06/2000
我想要的是所有来自详细信息的noLivre触及2000年6月的客户10号所做的所有命令
所以我应该得到回报:
noLivre
100
我是否超级坚持了任何帮助?
编辑:我觉得Delivered表就在这里,我们可能不需要它。
我现在所拥有的不起作用......
SELECT d.noLive
FROM Detail d
INNER JOIN Command c
ON c.noCommand = d.noCommand
WHERE c.date BETWEEN '01/06/2000' AND '30/06/2000' AND c.numberClient = 10
/
结果:
noLivre
100
100
103
101
100
答案 0 :(得分:1)
您需要加入表格才能获得所需的结果:
SELECT d.noLivre
FROM DETAILS d
INNER JOIN COMMAND c
ON c.noCommand = d.noCommand
WHERE c.Date BETWEEN TO_DATE('01-JUN-2000 00:00:00', 'DD-MON-YYYY HH24:MI:SS')
AND TO_DATE('30-JUN-2000 23:59:59', 'DD-MON-YYYY HH24:MI:SS') AND
c.numberClient = 10;
祝你好运。
答案 1 :(得分:0)
您可以计算详细信息表中每个noLivre
的命令数,并将其与命令表中客户端的命令数进行比较。
select d.noLivre
from (
select c.*, count(c.noCommand) over (partition by c.numberClient) as cntCommands
from Command c
) c
join Detail d on d.noCommand = c.noCommand
where c.numberClient = 10
and c.dtCommand >= date '2000-06-01' and c.dtCommand < date '2000-07-01'
group by d.noLivre, c.cntCommands
having count(distinct d.noCommand) = c.cntCommands;
NOLIVRE
----------
100
我使用带有分析计数命令的内联视图;对于客户端10,您显示的数据为cntCommands
为2。如果您想使用相同的方法查找具有所有命令的所有客户端,我将numberClient
进行分区,例如;否则nuberClient
过滤器也可以在内联视图中。
然后将内联视图连接到详细信息表,并计算该表中不同命令的数量。最后,它被分组,having
子句将内联视图(2)中的命令总数与详细信息表中的实际命令数进行比较。只有100有1和3,所以它的数量是2 - 和匹配 - 而101和103只有1 - 所以不匹配。