我有这样的查询:
SELECT [LAMI], [LGMI], [GTIM], [SPED], [IGST], [XXXM] as deviceID,
[PULSE_CTR], [FUEL_ADC]
FROM [Tracking]
INNER JOIN [Vehicles_Device_Rel] ON XXXM = '200039'
但我想这样:
SELECT [LAMI], [LGMI], DISTINCT [GTIM], [SPED], [IGST],
[XXXM] as deviceID, [PULSE_CTR], [FUEL_ADC]
FROM [Tracking]
INNER JOIN [Vehicles_Device_Rel] ON XXXM = '200039'
但是我收到了一个错误:
第15行,第1行,第1行,第1行 关键字' DISTINCT'附近的语法不正确。
请帮帮我,我是sql server的新手
示例数据:
LAMI | LGMI | GTIM | SPED | IGST | XXXM | PULSE_CTR | FUEL_ADC |
--------------+---------------+-------------------------+------+------+--------+-----------+----------+
12.9215736389 | 77.5954818726 | 2014-05-21 08:51:00.000 | 0 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-21 18:51:00.000 | 0 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-25 03:51:00.000 | 0 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-25 03:51:00.000 | 0 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-25 14:35:00.000 | 1 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-25 14:35:00.000 | 0 | 1 | 200039 | 0.00 | 0 |
12.9215736389 | 77.5954818726 | 2014-05-25 14:35:00.000 | 0 | 1 | 200039 | 2.00 | 0 |
答案 0 :(得分:2)
我觉得有必要向您解释问题,而不是解决方案,因为理解问题可能会帮助您解决问题。
想象一下以下简单的数据集
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| X | Y | 4 |
| X | Z | 3 |
| A | Y | 1 |
| A | Z | 2 |
+------+------+------+
你基本上说的是你想要一列的不同值,问题是从其他列中选择什么值。因此,假设我们只想要Col1(X和A)的不同值,我们将结果限制为2行,但是应该应用什么规则来获取col1(Y或X)和col2(1,2,3或4)的值,即你可以为每个排第一行,按Col3排序:
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| X | Z | 3 |
| A | Y | 1 |
+------+------+------+
或按Col2订购:
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| X | Y | 4 |
| A | Y | 1 |
+------+------+------+
或者您可以获取其他每列的最大值:
+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
| X | Z | 4 |
| A | Z | 2 |
+------+------+------+
关键是你需要确定要选择哪个值的逻辑,SQL Server(或任何其他DBMS)无法为您做出此决定。没有这个逻辑,就无法提供问题的答案。
如果所有其他值都相同,那么实际上没有选择,那么您可以在查询开始时使用DISTINCT。
答案 1 :(得分:1)
在开头使用“distinct”,它将删除重复的行和重复的日期。我看到重复日期的坐标是相同的
SELECT DISTINCT [LAMI], [LGMI], [GTIM], [SPED], [IGST],
[XXXM] as deviceID, [PULSE_CTR], [FUEL_ADC]
FROM [Tracking]
INNER JOIN [Vehicles_Device_Rel] ON XXXM = '200039'