0

嗨,我有一个 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

在第二个条件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如果在 上没有匹配,则 in 的值将为 NULL TABLEPricing。因此,您的下一次加入Prev将无法匹配任何内容。

由于您使用的是外部联接,因此您确实需要使用完整的表达式。

我相信你可以重写它以提高效率。您是否尝试确定上个月?它是基于日历月的吗?

于 2013-04-24T08:30:17.997 回答