Microsoft Query SQL查询问题

时间:2009-09-16 13:30:16

标签: sql

我是Microsoft Query的新手。

我定义了以下表格:

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

我需要这些信息:

REG_NO, ODO_READING, max(ODO_READING DATE), ODO_READING_TYPE 

但是从一个REG_NO,可能有多个ODO_READINGODO_READING DATE,我只需要ODO_READING最近的ODO_READING DATE

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

从上面的乱七八糟的文字中我假设以下架构

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
)

鉴于该架构,以下查询将为您提供所需的内容,假设在给定日期/时间内每个Reg_No只有一条记录:

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
)

我认为我的语法正确,一切都在我的头脑中,没有SQL服务器可以方便地进行测试。