Microsoft查询SQL查询问题
我对Microsoft Query完全陌生 我定义了以下表格:Microsoft查询SQL查询问题,sql,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
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\u NO
,可能会有多个ODO\u读取日期
和ODO\u读取日期
,我只需要ODO\u读取日期
和最近的ODO\u读取日期试试:
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
从上面混乱的文本中,我假设以下模式
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
)
假设给定日期/时间的每个注册号只有一条记录,则以下查询将给出您想要的结果:
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 server可以测试它。这不好,如果需要帮助,您需要提供表架构……请尝试使用文本编辑器中的代码块并重新格式化您的问题。现在我不明白你在问什么。