求SQL一句 ( 积分: 300 )

  • 主题发起人 主题发起人 myhby
  • 开始时间 开始时间
M

myhby

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL_Server数据库
表名 pricek
结构 (日期,品名,数量,单价,金额)
要求:
按品名进行分组,查询(品名,最大单价,最低单价,最新单价,平均单价)
说明:max(单价) as 最大单价,min(单价) as 最低单价,??如果求最新价???,sum(金额)/sum(数量) as 平均单价
求SQL语句?
 
select max(单价) as 最大单价,min(单价) as 最低单价,(select 单价 from pricek where 日期=max(日期)) as最新单价, sum(金额)/sum(数量) as 平均单价
 
select 品名,
max(单价) as 最大单价,
min(单价) as 最低单价,
(select 单价
from pricek as b
where b.品名=a.品名 and b.日期=max(a.日期)
) as最新单价,
sum(金额)/sum(数量) as 平均单价
from pricek as a
group by 品名

子查询时,如果是同一个表,一定要用别名区分。
这个sql里的子查询的“b.品名=a.品名”条件也不可少
 
select a.品名,Max(单价) as 最大单价,min(单价) as 最低单价,(select 单价 from pricek where 品名 = b.品名 and 日期=b.最新日期) as 最新单价 ,
sum(金额)/sum(数量) as 平均单价
from pricek a inner join
(select 品名,max(日期) as 最新日期 from pricek group by 品名) b on b.品名 = a.品名
group by a.品名,b.品名,b.最新日期
 
SELECT a.品名, a.最大单价, a.最低单价, a.平均单价, b.单价 AS 最新价格,
b.日期 AS 最后日期
FROM (SELECT 品名, MAX(单价) AS 最大单价, MIN(单价) AS 最低单价, SUM(单价 * 数量)/SUM(数量) AS 平均单价
FROM pricek
WHERE 品名 <> ''GROUP BY 品名 HAVING SUM(数量) <> 0) a
LEFT OUTER JOIN
(SELECT 品名, 单价, 日期
FROM pricek c WHERE (日期 =(SELECT MAX(日期)FROM pricek d WHERE d .品名 = c.品名))
GROUP BY 品名, 单价, 日期) b ON a.品名 = b.品名
ORDER BY 品名

调试了差不多花了一个小时了,(因为手头有个差不多的表,10W条记录左右,统计一下大概3秒钟吧。)终于能得到正确的答案。
有一个限制:如果同一品名在最大日期有多于一笔不同单价的交易,会把那天这些单价都列出。这个是正确的,因为LZ给的字段太少,如果增加单号之类就可以进一步判断了;或者日期本身就是一个日期时间型(就是连时分秒都有的),那就没问题了。

如果正确,赶紧给分~~~~~
:D...
 
楼上正解
SELECT a.品名, a.最大单价, a.最低单价, a.平均单价, b.单价 AS 最新价格,
b.日期 AS 最后日期
FROM (SELECT 品名, MAX(单价) AS 最大单价, MIN(单价) AS 最低单价, SUM(单价 * 数量)/SUM(数量) AS 平均单价
FROM pricek
WHERE 品名 <> ''GROUP BY 品名 HAVING SUM(数量) <> 0) a
LEFT OUTER JOIN
(SELECT 品名, 单价, 日期
FROM pricek c WHERE (日期 =(SELECT MAX(日期)FROM pricek d WHERE d .品名 = c.品名))
GROUP BY 品名, 单价, 日期) b ON a.品名 = b.品名
ORDER BY 品名
 
4位的回答都很精彩,让我又学了一手,我先测试一下,回头给分.
 
谢谢大家!
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部