アプリ版:「スタンプのみでお礼する」機能のリリースについて

1分ごとの時間がセットされている列があります。
ある時間から5分ごとの時間を全て取得したいと思います。
取得したいデータは1日の00:00から月末の23:55までです。
難しいのは、5分ごとのデータがない場合があり
無かった場合は1つ前のデータ(1分前でもなんでもいいから直近で1コ前)
を取得するということです。

select DATEADD(n, 5, '2009/06/01 00:00:00')

で5分後は分かるのですが1こしか取れないので
どうしたらいいか困っています。

A 回答 (3件)

>5分以上データが取得できなかった時にもその時刻のデータを直前のデータで補完したいです。



テーブルの中身が2009/06/01 00:00:00の1レコードしかなかったと仮定してください。
指定時刻が2009/06/01 00:00:00であった場合(これ以降5分おきに取得)、

2009/06/01 00:00:00
2009/06/01 00:00:00
2009/06/01 00:00:00
2009/06/01 00:00:00
・・・・・
2009/06/01 00:00:00
と(2009/06/30 23:55:55までの)8,640件を返したいという意味ですか?
(テーブルの中身が1件もない場合は8,640件のNULLが返される)

だとすると、1クエリでの実行は無理です(1件しかないデータを8,640件にすることはできないから)。
Transact-SQLのコードを書いてください(これもまた一例ですが)。。

DECLARE @T datetime--指定時刻
SET @T='2009/06/01 00:00:00'

DECLARE @WT datetime
DECLARE @WTBL TABLE (T datetime)

SET @WT=@T
WHILE (MONTH(@WT)=MONTH(@T))
BEGIN
INSERT INTO @WTBL VALUES (@WT)
SET @WT=DATEADD(n,5,@WT)
END

SELECT
(SELECT MAX([時刻]) FROM TIMETBL WHERE [時刻]<=t.T)
FROM @WTBL t

この回答への補足

ありがとうございます。

>(2009/06/30 23:55:55までの)8,640件を返したいという意味ですか?
>(テーブルの中身が1件もない場合は8,640件のNULLが返される)
やりたいことはそういうことです。

VB2008からSQL Server2008にデータを取りにいきます。
プログラムで5分ごとの時間が入った配列を作って
1レコードずつ素直に検索しにいくのとどっちが早いでしょうか?
8,640件の検索が最大で16セット発生します。

LINQというやつでもだめなのかな~。

補足日時:2009/09/16 17:46
    • good
    • 0

>プログラムで5分ごとの時間が入った配列を作って1レコードずつ素直に検索しにいくのとどっちが早いでしょうか?



8,640回クエリを実行しようと思っているならば、圧倒的にその方が遅いです。

8,640件×16のデータを取ってきて、最終的に必要なのが何か読めませんので、なんとも言えませんが、
8,640件×16のデータ全部を使わず、絞り込むのであれば、8,640件×16のデータを取ってくること自体がナンセンスです。
最初から必要なものだけ拾ってくればいいと思います。

>LINQというやつでもだめなのかな~
LINQは処理速度をアップするためのものではありませんよ。
    • good
    • 0
この回答へのお礼

やっぱり遅いですか。
全部取ってきてループさせようと思います。
何度も返信ありがとうございます。

お礼日時:2009/09/17 08:45

あくまで一例ですが。


データを指定時刻からの経過時間で5分単位のグループにして(ただし、ちょうど5分のボーダーのところは下のグループに含めるために1引く)、その中で逆順に連番を振り、各グループの1番目だけ抽出する。

SELECT [時刻]
FROM
(SELECT *,
ROW_NUMBER() OVER (PARTITION BY (DATEDIFF(n,'指定時刻',[時刻])-1)/5 ORDER BY [時刻] DESC) SEQ
FROM TIMETBL
WHERE [時刻]>='指定時刻') tmp
WHERE SEQ=1

この回答への補足

ありがとうございます。
だいたいできている気がしますが、
1日の00:00が取得できないことと
5分以上データが取得できなかった時にも
その時刻のデータを直前のデータで補完したいです。

補足日時:2009/09/16 15:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す