2017-07-12 8 views
1

今日より前に最新の日付のレコードを選択するにはどうすればよいですか? たとえば、2日前の日付(例:2017-07-10)の複数のレコードがあります。他の日付のレコードが増えています(例えば、2017-07-09、2017-07-08 ...)。今日より前の日付をMySqlで選択する方法は?

今、2017-07-10の日付のすべてのレコードを選択します。私は09、08、07のような他の日付を望んでいません。今日までに最新の日付のみを選択してください。どうやってやるの?

SELECT 
    AR.ID, mR.Description, AR.ActualReading 
FROM 
    machines M 
    INNER JOIN machinemeterreadinglist mRM 
     ON mRM.MachineID = M.ID 
    INNER JOIN meterreadingdescription mR 
     ON mR.ID = mRM.MeterReadingID 
    INNER JOIN actualmeterreading AR 
     ON AR.MachineMeterReadingId = mRM.ID 
    INNER JOIN meterreadingrecords mRec 
     ON mRec.ActualMeterReadingID = AR.ID 
WHERE 
    M.ID = '4364616d-8cff-4507-9dae-be4be8aee1f5' 
    AND mRec.rDate < CURRENT_DATE() 
LIMIT 
    1 ; 

答えて

0

使用すると、1つの特定のためのすべてレコードをしたいので、あなたはおそらく、あなたのWHERE句をリファクタリングすることができ、かつはLIMITを入れない日付だけでなく、私は推測します:

SELECT 
    AR.ID, mR.Description, AR.ActualReading 
FROM 
    machines M 
    INNER JOIN machinemeterreadinglist mRM 
     ON mRM.MachineID = M.ID 
    INNER JOIN meterreadingdescription mR 
     ON mR.ID = mRM.MeterReadingID 
    INNER JOIN actualmeterreading AR 
     ON AR.MachineMeterReadingId = mRM.ID 
    INNER JOIN meterreadingrecords mRec 
     ON mRec.ActualMeterReadingID = AR.ID 
WHERE 
    M.ID = '4364616d-8cff-4507-9dae-be4be8aee1f5' 
    AND mRec.rDate = 
    (
    SELECT 
     -- latest date with available data before today 
     MAX(mRed.rDate) 
    FROM 
     -- same joined tables as original query 
     machines M 
     INNER JOIN machinemeterreadinglist mRM 
      ON mRM.MachineID = M.ID 
     INNER JOIN meterreadingdescription mR 
      ON mR.ID = mRM.MeterReadingID 
     INNER JOIN actualmeterreading AR 
      ON AR.MachineMeterReadingId = mRM.ID 
     INNER JOIN meterreadingrecords mRec 
      ON mRec.ActualMeterReadingID = AR.ID 
    WHERE 
     -- same condition as original query 
     M.ID = '4364616d-8cff-4507-9dae-be4be8aee1f5' 
     AND mRec.rDate < CURRENT_DATE()  
    ) ; 

サイドノート


here dbfiddle であなたのシナリオの上:あなたの五の表の構造は、おそらく簡略化することができ、私には奇妙に見える合流します。私はそれらからあなたの構造を再現しようとしました。

+0

私は完璧な出力。 – batwing

0

おそらく、あなただけの昨日の日付を比較することができます:

SELECT AR.ID, mR.Description, AR.ActualReading 
FROM machines M INNER Join 
    machinemeterreadinglist mRM 
    ON mRM.MachineID = M.ID inner Join 
    meterreadingdescription mR 
    ON mR.ID = mRM.MeterReadingID inner Join 
    actualmeterreading AR 
    ON AR.MachineMeterReadingId = mRM.ID inner join 
    meterreadingrecords mRec 
    ON mRec.ActualMeterReadingID = AR.ID 
where M.ID = '4364616d-8cff-4507-9dae-be4be8aee1f5' AND 
     mRec.rDate = CURRENT_DATE() - INTERVAL 1 DAY; 
+0

これを使用して、私は昨日の日付のデータしか取得できません。一週間に何も記録がないが、記録から最新の入手可能な日付を取得する必要がある場合はどうすればよいですか? – batwing

+0

@batwing。 。 。そうすれば、別の質問が出るでしょう。新しい質問として尋ねられるべきです。これは非常に明示的です:「今、私は日付2017-07-10のすべてのレコードを選択したいと思います。私は09,08,07のような他の日付は望んでいません。今日より前に最新の日付のみを選択してください」 –

関連する問題