gpt4 book ai didi

mysql - 将 mysql 查询转换为 sql server 2000 的 mssql 查询

转载 作者:行者123 更新时间:2023-11-29 18:52:00 25 4
gpt4 key购买 nike

当我在 mssql 查询上执行 mysql 查询时,我一直在想为什么会出现错误。我使用的是sql server 2000。我的目标是用与mysql相同的方式实现结果。

关于数据库的一些解释:该数据库是关于一个 GPS 跟踪器的,有 3 个主表:传入、md_login 和 master_device。

这是我将给出的表格和结构:

表传入结构:
该表主要用于每辆车的 GPS 跟踪器的传入数据,因此每个时间间隔都会有数据传入该表。关于一些表结构,你可以说“tanggal”是英语“日期”的意思

Text1 varchar
...
Text18 varchar <used as imei>
...
Text31 varchar
Distance varchar
Tanggal datetime
TanggalIncoming datetime
StartDate datetime
EndDate datetime
EngineStatus varchar
AccStatus varchar
Moving varchar
Address varchar
<小时/>

表md_login的结构:
该表用于存储车辆的imei数据,因此1个Log_ID可以有多个Log_DeviceID。

Log_ID char <used as username>
Log_DeviceID varchar <used as vehicle number>
Log_DeviceIMEI varchar <used as imei>
Log_Date datetime

表md_login的示例数据:

Log_ID - Alex
Log_DeviceID - B 7777 GHI
Log_DeviceImei - 012896001194123
Log_Date - 2017-05-30 13:46:57
<小时/>

表master_device的结构:

Device_Imei varchar
Device_PoliceNumber char
Device_MobileNumber char
Device_MobileNumber2 char
Model varchar
Port char
PortDevice char
ActiveDate datetime
LastUpdate datetime
IdxConn varchar
CommandOperate char
Picture varchar

表master_device的示例数据:

Device_Imei - 012896001194123
Device_PoliceNumber - B 7777 GHI
Device_MobileNumber - 01234567
Device_MobileNumber2 -
Model - STV-08
Port - 340
PortDevice - 20557
ActiveDate - 2017-05-30 13:46:57
LastUpdate - Null
IdxConn - Null
CommandOperate - Null
Picture - livina_grey.png
<小时/>

这是已经在 mysql 上运行的查询:

SELECT fi.text18 as Imei,
md.Device_PoliceNumber,
fi.Text6 as Lat,
fi.Text8 as Lng,
fi.Text10 as Speed,
fi.Text16 as Gps_Signal,
fi.Text21 as Battery,
fi.Text22 as Charging,
fi.Text29 as Oil,
fi.Text30 as Temperature,
md.Picture,
fi.EngineStatus,
fi.TanggalIncoming,
fi.Moving,
fi.Address
FROM incoming fi
INNER JOIN (SELECT MAX(tanggalincoming) as maxtglincoming,text18,moving
FROM incoming
GROUP BY text18) ri
ON ri.maxtglincoming = fi.tanggalincoming AND
ri.text18=fi.text18
INNER JOIN md_login AS mdl ON (ri.text18=mdl.log_deviceimei AND
mdl.log_id='alex')
INNER JOIN master_device AS md ON md.device_imei=mdl.log_deviceimei
GROUP BY fi.text18
ORDER BY md.Device_PoliceNumber ASC

有关查询的一些解释:因此,我首先使用 MAX(tanggalincoming) 来根据表调用传入的最新更新来获取行结果。下一步是:我正在从最新传入表与完整传入表进行内部联接,因此将返回的数据基于已内部联接的最新传入数据。

这是当我在 mysql 中执行查询时将显示的示例数据结果。由于 1 个用户名可以拥有超过 1 辆车,因此结果可能会超过 1 行数据。

Imei - 012896001194123
Device_PoliceNumber - B 7777 GHI
Lat - -6.27585
Lng - 106.66172
Speed 0
Gps_Signal F
Battery - F:4.18V
Charging - 1
Oil - Null
Temperature - Null
Picture - livina_grey.png
EngineStatus - OFF
TanggalIncoming - 2017-05-31 05:25:59
Moving - STOP
Address - Example Street

但是当我尝试在 sql server 2000 上执行查询时,出现如下错误:

Server: Msg 8120, Level 16, State 1, Line 1.
Column 'md.Device_PoliceNumber' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

所以主要问题是:如何在sql查询中获得相同的结果?

最佳答案

如果您在 Sql Server 中使用聚合函数(例如 MAXSUM 等),则应在 GROUP BY 子句中包含所有其他字段.

在这种情况下,在子查询中,您有 SELECT MAX(tanggalincoming) as maxtglincoming,text18,moving 但只有 text18 包含在 GROUP BY< 中。应该看起来像这样:

SELECT MAX(tanggalincoming) as maxtglincoming,text18,moving
FROM incoming
GROUP BY text18,moving

第二个是大查询中没有任何聚合函数。所以你应该删除它。

如果您使用 GROUP BY 来抑制重复,请改用 DISTINCT

关于mysql - 将 mysql 查询转换为 sql server 2000 的 mssql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com