日期:2014-05-16  浏览次数:20802 次

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                      &n