0

こんにちは、私は 1 つの SQL クエリを持っています。sql

select * from Today
LEFT JOIN
        TABLEPricing Yesterday  ON 
        Yesterday.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date))
LEFT JOIN Prev ON
        Prev.Date = Yesterday.Date

2 番目の条件でPrev.Date = Yesterday.Dateは、 likeYesterday.Dateの以前の代入式が自動的に取得されますYesterday.DateYesterday.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date))

または、以下のように同じ条件を再度指定する必要があります。

Prev.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date))

私が混乱していることを明確にしてください。

4

2 に答える 2

2

外部結合にするために明示的に OUTER を記述しなければならないと思ったので、以前の回答を取り消さなければなりません。つまり、ElectricLlama は正しいです。条項を再度記載する必要があります。または、この場合、単純に LEFT を削除して、通常の結合にすることができます。

于 2013-04-24T07:44:26.167 に答える
1

それは正しくありません。これは外部結合であるため、 にYesterday.Date一致するものがない場合、 の値は NULL になりますTABLEPricing。したがって、次に参加するPrevと、何にも一致しなくなります。

外部結合を使用しているため、完全な式を使用する必要があります。

これをより効率的に書き直すことができると確信しています。前の月を特定しようとしていますか? それは暦月に基づいていますか?

于 2013-04-24T08:30:17.997 に答える