私は月のすべての日付のレコードを格納するテーブルを持っています。私はそれからいくつかのデータを取得したい。テーブルは非常に大きく、私はそれらのうちのいくつかだけを選ぶべきです。レコードに日付である "ric_date"という列がある場合、各日付のレコードを選択するにはどのようにしたらいいですか?月の各日から行を選択するSQL
の表は、1日の記録は100000件のレコードを持つことができるように大きいです。
私は月のすべての日付のレコードを格納するテーブルを持っています。私はそれからいくつかのデータを取得したい。テーブルは非常に大きく、私はそれらのうちのいくつかだけを選ぶべきです。レコードに日付である "ric_date"という列がある場合、各日付のレコードを選択するにはどのようにしたらいいですか?月の各日から行を選択するSQL
の表は、1日の記録は100000件のレコードを持つことができるように大きいです。
WITH T AS (
SELECT ric_date
FROM yourTable
WHERE rice_date BETWEEN @start_date AND @end_date -- thanks Aaron Bertrand
GROUP BY ric_date
)
SELECT CA.*
FROM T
CROSS APPLY (
SELECT TOP 500 * -- 'a fews'
FROM yourTable AS YT
WHERE YT.ric_date = T.ric_date
ORDER BY someAttribute -- not required, but useful
) AS CA
これがクエリに答えるかどうかわかりません。彼は、特定の月の各日付から "manys"日(これは今は500であると思います)を望んでいます(これはテーブル全体を解決するようです)、あなたは 'ric_date'に時間が含まれていないと仮定しました。 –
それは魅力のように動作します! – lamwaiman1988
@ gunbuster363これは、特定の月だけではなく、テーブル全体のデータを返しますか? –
ラフアイデア。現在の月の最初の3行(または任意の日に存在するもの)が取得されます。行が表示されていない日もあります。
DECLARE
@manys INT = 3,
@month DATE = DATEADD(DAY, 1-DAY(GETDATE()), DATEDIFF(DAY, 0, GETDATE()));
;WITH x AS
(
SELECT some_column, ric_date, rn = ROW_NUMBER() OVER
(PARTITION BY ric_date ORDER BY ric_date)
FROM dbo.data
WHERE ric_date >= @month
AND ric_date < DATEADD(MONTH, 1, @month)
)
SELECT some_column, ric_date FROM x
WHERE rn <= @manys;
サポートインデックス(最も重要なのはric_date)がない場合、これは必ずしもハイエンドで拡張されません。
こんにちはアーロン、 はFYI、あなたのクエリは、現在の月の前の月の最終日から行を返します。これを解決するには、> =>を変更します。 (このクエリでは、テーブルに何かが含まれている場合は、今後の月の行も返されます。) –
@Steve Whoa、hey Steve。私はもともとやや違っていた。とにかく私のバージョンがOPに役立ったようには思われません。 –
私にとってサミットの皆さんにお越しいただきたいと思います。あなたは、あなたが日付/時刻のクエリで間違いを犯したことに気づく必要はありません。 :) –
定義月の各日付から「fews」 –
例えば、500のレコードください。 – lamwaiman1988
使用しているSQL Serverのバージョンを教えてください。 –