1
條款得到了一些幫助,有一天就這個問題和現在真的想做出改變爲更好SQL Server 2008的左加入其中,基於最大日
這裏是代碼
select
machines.serialnum, DRPS.assetnumber, DRPS.MOCALCSUM, DRPS.MICALCSUM,
DRPS.COCALCSUM, DRPS.CICALCSUM, ISSUED.TotalIssued,
REDEEMED.TotalRedeemed,drps.dropdate1,drps.dropdate2
from
(select serialnum
from machineinfo) as machines
LEFT JOIN
(select
assetnumber, min(dropdate) as [dropdate1], max(dropdate) as [dropdate2],
sum(mocalc) AS [MOCALCSUM], sum(micalc) AS [MICALCSUM],
sum(cocalc) AS [COCALCSUM],sum(cicalc) AS [CICALCSUM]
from drops
where dropdate > '09/04/2012' and dropdate < dateadd(hour, -0, getdate())
GROUP BY assetnumber) AS DRPS on machines.serialnum = drps.assetnumber
LEFT JOIN
(select
snissued, cast(sum(amount) as money)/100 AS [TotalIssued]
from tickets
where dateissued > '09/04/2012' and dateissued < dateadd(hour, 0, getdate())
group by snissued) AS ISSUED ON machines.serialnum = ISSUED.snissued
LEFT JOIN
(select
snredeemed, cast(sum(amount) as money)/100 AS [TotalRedeemed]
from tickets
where dateredeemed > '09/04/2012' and dateredeemed < dateadd(hour, 0, getdate())
group by snredeemed) AS REDEEMED ON machines.serialnum = REDEEMED.snredeemed
我會想實現如果可能是第二個和第三個連接是使用drps.drop1
在where子句中像這樣
where dropdate > drps.dropdate1 and dropdate < drps.dropdate2
,但它不工作
這裏正在輸出
serialnum MOCALCSUM MICALCSUM COCALCSUM CICALCSUM TotalIssued TotalRedeemed dropdate1 dropdate2 0-2739-41401 5482 5498 132 148 3258.00 3110.00 2012-09-04 13:36:53.450 2012-09-05 13:55:38.750 0-2459-36182 1110 1054 114 58 1895.00 1657.00 2012-09-04 15:01:19.973 2012-09-05 13:55:38.967
最終的結果是我需要的全部已發行和總贖回日期範圍爲每基於從意見建議序號
只是在第一個左連接添加有可能,如果結果爲null,那麼它可以找到最近的日期之前,因爲沒有d在9/4之間吃東西,現在可以使用9/12/2012,因爲它是最後一個 –
在處理外部連接時,應該將所有有關外部表的過濾器連接在一起(ON子句),否則空行將不匹配過濾器除了'null'之外)並從結果集中移除。你可能想要添加更多有意義的問題描述,而不是'但它不起作用。事情不會以許多不同的方式工作。 –
如果我更改where dateissued> '09/04/2012'和dateissued drps.dropdate1和dateissued