目前,我有一张表格,其中包含以下三个
变量:company_name,data_date和price。
表中包含的数据具有时间序列性质。对于每个公司名称,都有包含company_name,price和两个日期之一'20011231'
或'20111230'
的行。
此数据集中没有重复项。我想帮助提出一个查询,该查询将日期'20111230'的价格除以每个company_name组的日期'20011231'的价格。
此外,如果没有包含两个日期的行,我想删除所有company_name行。
对于第一个查询,我尝试了以下代码,但它给出了以下错误:“操作数数据类型varchar对除运算符无效。”
SELECT (SELECT prc
FROM A_returns
WHERE [date] = '20111230'
GROUP BY [comnam], [PRC])/
(SELECT prc
FROM A_returns
WHERE [date] = '20111230'
GROUP BY [comnam], [PRC])
FROM A_returns
要删除上述错误,我尝试将price列中的值转换为浮点数,但我收到与以前相同的错误。
UPDATE A_returns
SET prc = CAST(prc AS float)
GO
答案 0 :(得分:1)
你可以做这样的事情
SELECT t1.comnam, t1.prc / t2.prc AS price_ratio
FROM A_returns t1 JOIN A_returns t2
ON t1.comnam = t2.comnam
AND t1.date = '20111230'
AND t2.date = '20111231'
示例输出:
| COMNAM | PRICE_RATIO | |----------|----------------| | company1 | 1.052631578947 | | company2 | 0.909090909091 |
这是 SQLFiddle 演示
删除没有两个日期记录的公司的行
DELETE t1
FROM A_returns t1 JOIN
(
SELECT comnam
FROM A_returns
GROUP BY comnam
HAVING COUNT(*) = 1
) t2
ON t1.comnam = t2.comnam
这是 SQLFiddle 演示