日期:2014-05-17  浏览次数:20600 次

日期的数值查询
请教下,有以下数据,请和如何实现查询最早日期以及最晚日期的数值?
事项   单价   日期
A001       2        2012-07-01
A001       2.5      2012-11-12
A001       2.8      2012-11-14
B001       1.5      2012-08-16
B001       1.5      2012-09-17
C001       1        2012-09-20
-----------------------


经查询,期初单价为最早日期显示的单价数值,期末单价为最后日期显示的单价数值,显示结果为下:
事项     期初单价      期末单价
A001         2              2.8
B001         1.5            1.5
C001         1              1
---------------------------
------最佳解决方案--------------------
--CREATE TABLE huang(事项 VARCHAR(10),   单价 DECIMAL(9,2),  日期 DATE)
--INSERT INTO huang
--SELECT 'A001',       2      ,  '2012-07-01'
--UNION ALL 
--SELECT 'A001' ,      2.5   ,   '2012-11-12'
--UNION ALL 
--SELECT 'A001'  ,     2.8   ,   '2012-11-14'
--UNION ALL 
--SELECT 'B001' ,      1.5   ,   '2012-08-16'
--UNION ALL 
--SELECT 'B001' ,      1.5  ,    '2012-09-17'
--UNION ALL 
--SELECT 'C001' ,      1     ,   '2012-09-20'

WITH huang2 AS (
SELECT 事项,MAX(日期 )最大日期,MIN(日期)最小日期
FROM huang
GROUP BY 事项)
SELECT a.事项 ,MAX(CASE WHEN a.最小日期=b.日期 THEN 单价 END)  期初单价,MAX(CASE WHEN a.最大日期=b.日期 THEN 单价 END)  期末单价
FROM huang2 a INNER JOIN huang b ON a.事项=B.事项
GROUP BY a.事项

/*
事项         期初单价                                    期末单价
---------- --------------------------------------- ---------------------------------------
A001       2.00                                    2.80
B001       1.50                                    1.50
C001