2009-11-28 155 views
-2

有人可以帮助我得到这个表串成以下查询..SQL嵌套查询

CREATE TABLE [dbo].[TblNdx](
[ticker] [nvarchar](12) NOT NULL, 
[date] [datetime] NULL, 
[time] [datetime] NULL, 
[open] [float] NULL, 
[high] [float] NULL, 
[low] [float] NULL, 
[close] [float] NULL, 
[volume] [float] NULL, 
[change] [float] NULL 
) ON [PRIMARY] 

我需要一个查询,获取最后XXX记录WHERE ...

SELECT ticker, date, time, [open], high, low, [close], volume, change 
FROM TblNdx 
WHERE 1=1 
AND (ticker = '^IXIC') 
AND (date = 
     (
      SELECT TOP (1) date as date1 
      FROM TblNdx AS TblNdx_1 
      WHERE (ticker = '^IXIC') 
      ORDER BY date DESC 
     ) 
    ) 
ORDER BY time DESC 

然后将另一个列添加到计算机LASTCLOSE,这是上一个日期的上一个关闭日期... DATEDIFF(日期,日期,date1)= 1并且时间是前一天的第一个时间...换句话说,前一天...嵌套的SELECT TOP 1子句正在杀死我......任何人都擅长这个?

我不是不尊重。我是一个像每个人一样喝玛格丽塔酒的极客......!无论如何,我欣赏编辑。为了得到前一个最后关闭日期,我试图修改..任何与此代码的帮助它说'只有一个表达式可以在SELECT列表中指定当子查询没有与EXISTS引入..

我使用Visual Studio运行查询,它缩进很奇怪的方式......我想我真的不知道如何正确缩进!

SELECT ticker 
    , date 
    , time 
    , [open] 
    , high 
    , low 
    , [close] 
    , volume 
    , change 
    , (SELECT TOP (1) time AS time1, [close] AS lastclose 
     FROM TblNdx WHERE (DATEDIFF(day, date, date1) = 1) 
     AND (ticker = '^IXIC') ORDER BY time1 DESC) AS Expr1 
    FROM TblNdx AS TblNdx_2 
    WHERE (1 = 1) AND (ticker = '^IXIC') 
    AND (date = (SELECT TOP (1) date AS date1 
        FROM TblNdx AS TblNdx_1 
        WHERE (ticker = '^IXIC') 
        ORDER BY date1 DESC)) 
    ORDER BY time DESC 
+0

我们都会宁愿去得到一些玛格丽塔。 -1没有表现出任何的尊重。 – 2009-11-28 23:23:27

+0

我有一种感觉,你会从正确缩进你的代码中受益匪浅。 – 2009-11-28 23:26:34

+0

在SQL中大喊大叫,但文字大喊大叫。 – BalusC 2009-11-29 02:47:42

回答

0

这是怎么回事?

注:我没有测试,期待错别字

;WITH todaydate as 
(
    SELECT max(date) as date, ticker 
    FROM tblndx 
    group by ticker 
), yesterdaydate as 
(
    SELECT max(time) as time, ticker 
    FROM tblndx 
    group by ticker 
    having DATEDIFF(Day, date, getdate()) = 1 
) 
SELECT ticker 
    , date 
    , time 
    , [open] 
    , high 
    , low 
    , [close] 
    , volume 
    , change 
    , yeserdaydate.time as [yeserday time] 
from tblndx 
inner join todaydate on tblndx.ticker = todaydate.ticker and tblndx.date = todaydate.date 
left join yesterdaydate on tblndx.ticker = yeserdaydate.ticker 
+0

够好,谢谢... – CraigJSte 2009-12-02 13:31:03

0
 SELECT ticker 
    , date 
    , time 
    , [open] 
    , high 
    , low 
    , [close] 
    , volume 
    , change 
    , (SELECT TOP (1) [close] FROM TblNdx AS t2 
      WHERE (DATEDIFF(day, date, t1.date) = 2) 
          AND (ticker = t1.ticker) 
      ORDER BY time DESC) AS LastClose 
    FROM TblNdx AS t1 
    WHERE (ticker = '^IXIC')  
    AND (date = (SELECT TOP (1) date 
     FROM TblNdx AS t3 
        WHERE (ticker = '^IXIC') 
    ORDER BY time DESC)) 
    ORDER BY time DESC 

我本来应该更清楚,我需要的最后截止日期所有的价格(接近)最新的前1日......然后前面的最后一个日期收盘价TOP只有1次...

CS