当前位置: 代码迷 >> Oracle管理 >> ORACLE 算每天每种物品的数量
  详细解决方案

ORACLE 算每天每种物品的数量

热度:71   发布时间:2016-04-24 04:23:31.0
ORACLE 算每日每种物品的数量
表   字段1          字段2      字段3
     时间           物品       数量
  2013-9-20 13:00:00     物品1       3
  2013-9-20 14:00:00     物品1       5
  2013-9-20 17:00:00     物品1       7

  2013-9-20 13:00:00     物品2       3
  2013-9-20 14:00:00     物品2       5
  2013-9-20 17:00:00     物品2       7

  2013-9-20 13:00:00     物品3       3
  2013-9-20 14:00:00     物品3       5
  2013-9-20 17:00:00     物品3       7

怎么算每天每种物品时间最早的数量和时间最晚的数量,写出两个SQL
------解决方案--------------------
最早:
SELECT A.物品,TO_CHAR(A.时间,'yyyymmdd')日期, SUM(A.数量)
  FROM TABLE A,
       (SELECT 物品,TO_CHAR(时间,'yyyymmdd')日期, MIN(时间)时间 FROM TABLE GROUP BY 物品,TO_CHAR(时间,'yyyymmdd')) B
 WHERE A.物品= B.物品
   AND A.时间= B.时间
    AND A.日期=B.日期
 GROUP BY A.物品,TO_CHAR(A.时间,'yyyymmdd')

最晚:
SELECT A.物品,TO_CHAR(A.时间,'yyyymmdd')日期, SUM(A.数量)
  FROM TABLE A,
       (SELECT 物品,TO_CHAR(时间,'yyyymmdd')日期, MAX(时间)时间 FROM TABLE GROUP BY 物品,TO_CHAR(时间,'yyyymmdd')) B
 WHERE A.物品= B.物品
   AND A.时间= B.时间
    AND A.日期=B.日期
 GROUP BY A.物品,TO_CHAR(A.时间,'yyyymmdd')

------解决方案--------------------
--最晚
select sum(数量) from
(select tempMaro2.*,row_number() over(partition by 物品 order by 时间 desc) px from tempMaro2) 
where px = 1

--最早
select sum(数量) from
(select tempMaro2.*,row_number() over(partition by 物品 order by 时间) px from tempMaro2) 
where px = 1
------解决方案--------------------
上面我发的没写完 稍等
------解决方案--------------------
--最晚
select *  from
(select tempMaro2.*,row_number() over(partition by 物品,trunc(时间) order by 时间 desc) px from tempMaro2) 
where px = 1;

--最早
select *  from
(select tempMaro2.*,row_number() over(partition by 物品,trunc(时间) order by 时间) px from tempMaro2) 
where px = 1;
------解决方案--------------------
                  WITH TABLEA AS                                         
                   ( SELECT to_date('2013-9-20 13:00:00','yyyy-mm-dd hh24:mi:ss') C1,1 C2,3 C3 FROM DUAL 
                     SELECT to_date('2013-9-20 14:00:00','yyyy-mm-dd hh24:mi:ss') C1,1 C2,5 C3 FROM DUAL 
                     SELECT to_date('2013-9-20 17:00:00','yyyy-mm-dd hh24:mi:ss') C1,1 C2,7 C3 FROM DUAL 
                                                                         
                     SELECT to_date('2013-9-20 13:00:00','yyyy-mm-dd hh24:mi:ss') C1,2 C2,3 C3 FROM DUAL 
                     SELECT to_date('2013-9-20 14:00:00','yyyy-mm-dd hh24:mi:ss') C1,2 C2,5 C3 FROM DUAL 
                     SELECT to_date('2013-9-20 17:00:00','yyyy-mm-dd hh24:mi:ss') C1,2 C2,7 C3 FROM DUAL 
                                                                       
  相关解决方案