我是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_READING
和ODO_READING DATE
,我只需要ODO_READING
最近的ODO_READING DATE
。
答案 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服务器可以方便地进行测试。