Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft查询SQL查询问题_Sql - Fatal编程技术网

Microsoft查询SQL查询问题

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

我对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\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可以测试它。

这不好,如果需要帮助,您需要提供表架构……请尝试使用文本编辑器中的代码块并重新格式化您的问题。现在我不明白你在问什么。