0

誰かがこれを正しくするのを手伝ってくれることを願っています。私は現在、このSQLコマンドを実行してExcelシートにデータを取得していますが、それは私を狂わせています。

結合する必要がある 3 つのテーブルがあります

  • sup = 消耗品の時間別データ
  • 監査 = 物が到着したときのログ (SUP & メーター)
  • メートル = メートルの毎日のデータ

これは、物事が制御不能になり始める前に、私が本質的にたどり着いた場所です. sup と aud を結合させたり、meters と aud を結合させたりできます。問題のサプライのトップメーターを選択することはできませんが。

SELECT      sup.*, aud.*, meters.*
FROM        SuppliesData AS sup
INNER JOIN  Audit As aud
ON          sup.AuditID = aud.AuditID 
    WHERE   sup.DeviceID = '14365' 
INNER JOIN  (
    SELECT TOP 1
    From    MeterAudit AS meters
    INNER JOIN aud
    ON aud.AuditID=meters.AuditID 
    WHERE meters.DeviceID='14365' AND sup.AuditDate > meters.AuditDate// << I am so confused now...
    ORDER by    aud.AuditDate ASC
    )
ORDER by    aud.AuditDate ASC

私の混乱を理解しようとしたことをお詫びします。

基本的に、sup にも meter にも AuditDate フィールドはありません。AuditDate フィールドを供給品に適用し、供給品ごとに最も近いメーターを取得する必要があります。現在私が得ているのは(おそらくわかるように)ネストです...私が得ているエラーについて私が見るのは、「FROMの周りの不適切な構文」だけです

どんな助けでも大歓迎です、

参考までに、次のコードは完全に正常に動作します

SELECT  sup.*, aud.*
// -  simply changing SuppliesData to MeterAudit changes everything perfectly.
FROM    SuppliesData AS sup 
INNER JOIN  Audit As aud
ON  sup.AuditID = aud.AuditID 
WHERE DeviceID = '14365' 
ORDER by    aud.AuditDate ASC

jc

4

1 に答える 1

2

代わりにこれを試してください:

SELECT      sup.*, aud.*, meters.*
FROM        SuppliesData AS sup
INNER JOIN  Audit As aud ON  sup.AuditID  = aud.AuditID 
                         AND sup.DeviceID = aud.DeviceID 
INNER JOIN  
(
    SELECT AuditID, MAX(AuditDate) MaxDate
    From    MeterAudit
    GROUP BY AuditID
) Maxa ON aud.AuditID = maxa.AuditID AND sup.AuditDate = maxa.AuditDate
WHERE   sup.DeviceID = '14365' 
于 2012-12-08T08:44:10.603 に答える