问题描述:抓取程序的结果精度不够,导致入库的数据有的正确,有的错误,需要找出错误的数据.
抓取下来的数据有三个值,最高价,最低价和平均值.其中最高价和最低价由网页提供,平均值是自己算出来的,但是平均值被强制转换为了int类型,所以导致了精度的丧失.
思路分析:写SQL语句,进行判断,找出错误的数据.
表内容截图:
--mValue是存储数据的列
--当indiccode2=79246时,mValue存储的是最低价的数据
--indiccode2=79247 --最高价
--indiccode2=79248 --平均值值
--由indiccode,indiccode2, enddate确定唯一的一条记录
--当indiccode,enddate相同时,会查出三条记录,分别是最低价,最高价和平均值.
最终结果:
SELECT
A.indiccode AS indiccode,
A.enddate AS enddate,
A.avgRight AS avgRight,
B.mvalue AS avgWrong
FROM
(
SELECT indiccode, enddate,avg(mvalue) AS avgRight
FROM Industry_datamid
WHERE indiccode2=79246 or indiccode2=79247
GROUP BY enddate,indiccode
) AS A
join
(
SELECT indiccode, enddate,mvalue
FROM Industry_datamid
WHERE indiccode2=79248
) AS B
on
(
(A.avgRight <> B.mvalue)
and (A.indiccode = B.indiccode)
and A.enddate = B.enddate
)
1.使用查询结果做为临时表,语法是:
(SELECT * FROM ...) AS [表名]
可以对这个临时表进行查询操作
2.使用JOIN语句进行组合表
组合方式大致有这几种:
1)INNER JOIN
2)OUTER JOIN( LEFT 和 RIGHT)
3)FULL JOIN
4)CROSS JOIN
具体描述可见sql 2008入门经典 p68 和 点击打开链接 中的内容
3.SQL中使用 <> 代替 !=
留一个小问题:
你知道表A中是如何求出平均值的吗?