Oracle命令从日期到日期

时间:2016-02-24 11:53:09

标签: oracle oracle-sqldeveloper

以下是我的表格和我超级迷失:

      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

2 个答案:

答案 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 - 所以不匹配。