2009-09-16 8 views
0

Je suis complètement nouveau à Microsoft Query.Question de requête Microsoft Query SQL

J'ai les tableaux suivants définis:

FLEET_MASTERS Table   
- REG_NO 
- FMS_ID 

ODOMETERS Table       
- ODO_ID 
- FMS_ID 

ODOMETERS_READING Table 
- ODO_ID   
- ODO_READING 
- ODO_READING_DATE 
- ODO_READING_TYPE 

J'ai besoin de ces informations:

REG_NO, ODO_READING, max(ODO_READING DATE), ODO_READING_TYPE 

Mais d'un REG_NO, il peut y avoir plusieurs ODO_READING et ODO_READING DATE, je dois juste le ODO_READING avec le le plus récent ODO_READING DATE.

+0

Ce n'est pas bon, vous devez fournir les schémas de la table si vous voulez de l'aide ... –

+5

S'il vous plaît essayez d'utiliser le bloc de code dans l'éditeur de texte et re-formater votre question. Actuellement, je ne peux pas comprendre ce que vous demandez. –

Répondre

0

Essayez:

select fm.REG_NO, odr.ODO_READING, odr.ODO_READING_DATE as MAX_READING_DATE, odr.ODO_READING_TYPE 
from FLEET_MASTERS fm 
inner join ODOMETERS od on fm.FMS_ID = od.FMS_ID 
inner join (
    select ODO_ID, max(odr.ODO_READING_DATE) as MAX_READING_DATE 
    from ODOMETERS_READING 
    group by ODO_ID 
) odm 
inner join ODOMETERS_READING odr on odm.ODO_ID = odr.ODO_ID and odm.MAX_READING_DATE = odr.ODO_READING 
0

À partir de votre désordre de texte ci-dessus je suppose que le schéma suivant

CREATE TABLE FLEET_MASTERS 
(
    FMS_ID INT PRIMARY KEY, 
    REG_NO VARCHAR(10) 
) 
CREATE TABLE ODOMETERS_READING 
(
    OMR_ID INT PRIMARY KEY, 
    FMS_ID INT, 
    ODO_READING INT, 
    ODO_READING_DATE DATETIME, 
    ODO_READING_TYPE INT 
) 

Compte tenu de ce schéma la requête suivante vous donnera ce que vous voulez, en supposant qu'il n'y a qu'un seul enregistrement par Reg_No pour une date/heure donnée:

SELECT 
    FM.REG_NO, 
    OMR.ODO_READING, 
    OMR.ODO_READING_DATE, 
    OMR.ODO_READING_TYPE 
FROM FLEET_MASTERS FM 
INNER JOIN ODOMETERS_READING OMR 
    ON FM.FMS_ID = OMR.FMS_ID 
WHERE OMR.ODO_READING_DATE = (
    SELECT MAX(OMR1.ODO_READING_DATE) 
    FROM ODOMETERS_READING OMR1 
    WHERE OMR1.FMS_ID = FM.FMS_ID 
) 

Je pense que j'ai cette syntaxe correcte , tout sur le dessus de ma tête, pas de serveur SQL à portée de main pour le tester.