2016-04-01 5 views
1

の最初の発生を取得:は、私は、次のT-SQLステートメントによって作成されたテーブルを持つ行

CREATE TABLE [Core].[PriceHistory](
    [PriceHistoryId] [bigint] IDENTITY(1,1) NOT NULL, 
    [SourceId] [tinyint] NOT NULL, 
    [SymbolId] [smallint] NOT NULL, 
    [Ask] [real] NOT NULL, 
    [Bid] [real] NOT NULL, 
    [TickTime] [bigint] NOT NULL, 
    [ModifiedDate] [datetime2](3) NOT NULL, 
    [Direction] [tinyint] NULL, 
CONSTRAINT [PK_PriceHistory] PRIMARY KEY CLUSTERED 
(
[PriceHistoryId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

のは、(1、2、3)例えば、私はSymbolIdsのリストを持っているとしましょう。 「2016年4月1日夜12時〇〇分00秒」より

私は最初の行はSymbolIdがModifiedDateをされたのforeach取得したい>

+0

私は、「最初の」仮定「最新 'ModifiedDate'」を意味します。テーブルには固有の順序がないので、指定する必要があります。 – HoneyBadger

答えて

2
SELECT * 
FROM (
    SELECT DENSE_RANK() OVER (
      PARTITION BY SymbolId ORDER BY ModifiedDate 
      ) RNK 
     ,* 
    FROM PriceHistory 
    WHERE ModifiedDate > '2014-04-01 00:00:00' 
    ) T 
WHERE RNK = 1 
関連する問題