请教SQL高手帮忙解决!

来源:百度知道 编辑:UC知道 时间:2024/05/27 21:23:06
Tdate(日期)Symbol(合约代码)LCLOSE(昨收盘)TClose(收盘价 )
20090414 AG0001 2801 2917
20090415 AG0001 2869 2857
我想编写一个可以查到,昨收盘和前一天的收盘价不一样的合约代码!像20090415号的昨收盘应该等于20090414的收盘价,但是我想查询出不一样数据的SQL?
有高手可以解决,并教会我,我会追加50分!谢谢

TABLENAME改成你自己的表名,需要解释查询过程,QQ244202637
SELECT
A.TDATE,A.SYMBOL,A.LCLOSE,A.TCLOSE
FROM
TABLENAME A
LEFT JOIN
(
SELECT CONVERT(CHAR(8),CONVERT(DATETIME,TDATE,112)+1,112),
SYMBOL,
TCLOSE
FROM TABLENAME
) B
ON A.TDATE=B.TDATE AND A.SYMBOL=B.SYMBOL
LEFT JOIN
(
SELECT CONVERT(CHAR(8),CONVERT(DATETIME,TDATE,112)-1,112),
SYMBOL,
LCLOSE
FROM TABLENAME
) C
ON A.TDATE=C.TDATE AND A.SYMBOL=C.SYMBOL
WHERE A.LCLOSE!=B.TCLOSE OR A.TCLOSE=C.LCLOSE

先建一个视图把正常的日期减一,其他都不变。
create or replace view temp_v1 as
select Tdate-1 as Tdate,Symbol,LCLOSE,TClose from table_name;

再检索符合你要求的数据
select
a.Tdate,a.Symbol,a.LCLOSE,a.TClose,
b.Tdate+1 as Tdate,b.Symbol,b.LCLOSE,b.TClose, from table_name a,temp_v1 b where a.Tdate=b.Tdate and a.LCLOSE <> b.LCLOSE;

--
以上,希望对你有所帮助。