如何在查询的中间或最后一列使用Distinct

时间:2014-05-27 07:40:52

标签: c# sql sql-server-2005

我有这样的查询:

 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    |

2 个答案:

答案 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'