【问题标题】:SQL Join same tables on datetime?SQL在日期时间加入相同的表?
【发布时间】:2014-01-16 08:30:33
【问题描述】:

数据

 id |   name |         ReadingDateTime | RID |           RName |     Value
173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
173 | OLİMPA | 2013-12-30 13:43:31.000 | 15  | Aktif Endeks T1 | 12444,355
173 | OLİMPA | 2013-12-31 12:44:29.000 | 15  | Aktif Endeks T1 | 12452,486
173 | OLİMPA | 2013-12-31 15:14:27.000 | 15  | Aktif Endeks T1 | 12456,518
173 | OLİMPA | 2013-12-31 17:14:34.000 | 15  | Aktif Endeks T1 | 12459,294
...

查询

SELECT SRA2.Value-SRA.Value AS Diff, SRA.*
FROM Summary_Reading_All SRA
INNER JOIN Summary_Reading_All SRA2 ON SRA2.ReadingDateTime = SRA.ReadingDateTime
WHERE SRA.ReadingTypeId = 15
AND SRA.DeviceId = 173
ORDER BY SRA.ReadingDateTime

输出

Diff       |  id |   name |         ReadingDateTime | RID |           RName |     Value
0          | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
-5978,216  | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
-7807,397  | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
-12414,146 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
11042,679  | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
-11580,143 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
-12414,146 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15  | Aktif Endeks T1 | 12414,146
(7 times)
Diff | 173 | OLİMPA | 2013-12-30 13:43:31.000 | 15  | Aktif Endeks T1 | 12444,355
(7 times)
Diff | 173 | OLİMPA | 2013-12-31 12:44:29.000 | 15  | Aktif Endeks T1 | 12452,486
(7 times)
Diff | 173 | OLİMPA | 2013-12-31 15:14:27.000 | 15  | Aktif Endeks T1 | 12456,518
(7 times)
Diff | 173 | OLİMPA | 2013-12-31 17:14:34.000 | 15  | Aktif Endeks T1 | 12459,294

我想加入同一张表并获得值字段的差异。当我执行上述代码时,每条记录重复 7 次。为什么记录重复 7 次,日期时间字段是唯一的。

任何建议,谢谢...

【问题讨论】:

    标签: sql join sql-server-2012


    【解决方案1】:

    对 TheConstructors 的进一步回答....

    SELECT SRA2.Value-SRA.Value AS Diff, SRA.*
    FROM Summary_Reading_All SRA
    INNER JOIN Summary_Reading_All SRA2 ON SRA2.ReadingDateTime = SRA.ReadingDateTime
    AND SRA.ReadingTypeId = SRA2.ReadingTypeId
    AND SRA.DeviceId = SRA2.DeviceId
    WHERE SRA.ReadingTypeId = 15
    AND SRA.DeviceId = 173
    ORDER BY SRA.ReadingDateTime
    

    【讨论】:

    • 非常感谢...我明白为什么要重复 7 次。第一个表由 deviceId 和 ReadingTypeId 过滤,但第二个表不是。
    • 第二个问题:如何获取值字段的差异?我想获取SRA.Value[1] - SRA.Value[0]我的代码获取错误。
    • 你如何定义 get SRA.Value[1] - SRA.Value[0] ?举个例子。
    【解决方案2】:

    如果ReadingDateTime 是唯一的,您应该只得到Diff 为0 的行,因为只有行本身才能填充查询的SRA2.ReadingDateTime = SRA.ReadingDateTime 部分。

    目前您的WHERE 条件仅适用于 SRA,但不适用于 SRA2。为了获得有意义的结果,我想您需要找到一种方法使该行与自身不匹配;可能是通过在 SRA2 中选择不同的 deviceId 或检查 SRA 和 SRA2 之间的主键是否不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多