【发布时间】:2016-05-09 14:50:44
【问题描述】:
我是 SQL 查询的新手,我需要从这个查询开始进行连接:
SELECT b.Name, a.*
FROM a INNER JOIN b ON a.VId = b.Id
WHERE b.SId = 100
AND a.Day >= '2016-05-05'
AND a.Day < '2016-05-09';
并向第一个选定数据(表 c 中的 SCap 和 ECap)添加 2 列。 根据我的尝试,我的代码如下所示:
SELECT b.Name,a.*,
c.MaxDay,
c.Cap,
FROM a INNER JOIN b
ON a.VId = b.Id
INNER JOIN
(SELECT VId,
MAX(TimestampLocal) AS MaxDay,
CAST (TimestampLocal AS DATE) AS Day,
Cap,
FROM Info
GROUP BY VId,
CAST (TimestampLocal AS DATE),
Cap) AS c
ON a.VId = c.VId
AND a.Day = c.Day
WHERE b.SId = 33
AND a.Day >= '2016-05-05'
AND a.Day < '2016-05-09';
但我得到的行数比需要的多。
我需要日期范围内给定车辆的最早和最新 TimestampLocal。这将来自 Info 中的两条记录,每条记录都有其适当的 Cap 值。 例如: 我有两个名称,其值在表信息内 2 天(名称 1)和名称 2 仅 1 天:
- Day 1 2016-05-07:
- Name 1: Values at 2:45, 10:10 and 3.10
- Name 2: Values at 5:13 and 8:22
- Day 2 2016-05-09:
- Name 1: Values at 4:13, 6:15 and 9:20
我需要显示(如果我选择日期范围:2016-05-05 到 2016-05-09)对于 SCap 的名称 1 从 2:45 开始的 2016 年 5 月 7 日的值,对于 ECap 的从 2016 年 5 月 9 日的值9:20 和名称 2 的 SCap 从 2016 年 5 月 7 日的值从 5:13 开始,对于 ECap 的值从 2016 年 5 月 7 日从 8:22 开始。这应该显示为 2 行。
有没有一种方法可以将这两列添加到我的查询中,而无需为同名添加更多行?
编辑! 表 a 我有:
VId | Day
5251 | 05/09/2016
5382 | 05/09/2016
表b:
Id | Name
5251 | N1
5382 | N2
表信息:
VId | TimestampLocal | Cap
5251 | 2016-05-09 11:33:46.2000000 +03:00 | 0
5251 | 2016-05-09 11:37:11.4000000 +03:00 | 7
5251 | 2016-05-09 11:38:11.4000000 +03:00 | 4
5251 | 2016-05-09 11:39:11.7000000 +03:00 | 2
5382 | 2016-05-09 09:30:56.6000000 -04:00 | 5
5382 | 2016-05-09 09:31:56.6000000 -04:00 | 3
而且我需要显示 - 如果我选择从 2016-05-03 到 2016-05-10 的日期范围:
Id | Name | SCap | ECap
5251 | N1 | 0 | 2
5382 | N2 | 5 | 3
【问题讨论】:
-
你能展示一些示例数据和预期的结果吗?
-
@vkp - 我已经更新了我的问题
标签: sql sql-server tsql