ストアドプロシージャでSQL SELECTクエリを構成するために必要なロジックに苦労しています。私のデータベースは株式市場のデータで動作します。私は、2012年の取引日表、ティッカー記号の表、およびこれらの記号と取引日の日々の価格データの表をWebサービス経由で持っています。私は苦労している私の選択したクエリからコンポーネントで書かれたWebサービスのアドレス文字列を取得しようとしています。ストアドプロシージャのSQLサーバー選択クエリヘルプ
以下の最初の手順は、「シンボル、開始日、終了日」フィールドに開始日と終了日が、シンボルごとに必要な最新のデータポイントと最新のデータポイントを持つレコードを返すのに十分適しています。
ALTER PROCEDURE dbo.sprocSymbsDatesForHistoricalPricingVoll
AS
DECLARE @NxtAvailableDataDownloadDate date
SET @NxtAvailableDataDownloadDate = dbo.NextAvailableDataDownloadDate()
SELECT Symbol, MIN(TradingDate), Max(TradingDate)
FROM (SELECT Symbol, TradingDate
FROM (SELECT tblSymbolsMain.Symbol, tblTradingDays.TradingDate
FROM tblSymbolsMain CROSS JOIN
tblTradingDays
WHERE (tblTradingDays.TradingDate <= @NxtAvailableDataDownloadDate)) AS T1
WHERE (NOT EXISTS
(SELECT TradeDate, Symbol
FROM tblDailyPricingAndVol
WHERE (TradeDate = T1.TradingDate) AND (Symbol = T1.Symbol)))) t GROUP BY Symbol ORDER BY Symbol
これは、すべての取引日のすべての株価記号をクロス・ジョインして、私のプライシング・テーブルにないものを返すのは大丈夫です。ファイン。
AAPL, 1/1/12, 1/10/12
私はすでに私の価格表の必要なデータの一部を持っているかもしれません:私の問題は、私は戻って私の分を与えるとmaxは私のような必要なシンボルあたりのテーブルから日付の行を取得するかもしれないが、あります私は戻って、この場合、取得したいと思い何
AAPL, 1/5/12- 1/9/12
は次のようになります:代わりに、上記の銘柄記号と最初の例の
AAPL, 1/1/12, 1/4/12
AAPL, 1/10/12, 1/10/12
ているような日付範囲内の点、。手続き型コードでループすることでこれを簡単に行うことができますが、これはdb側で実装されていることを確認したいと思います。何か案は?ありがとうございます...
私はそれを感謝..私は、SQLでの再帰に新しいんだけど、私はそれを実装しようとするでしょう。私は「典型的な」select文がそれをしないと感じていました。ありがとう。 – StatsViaCsh