我有两个表:
Events (ID, Name, Time, Recorder)
Video (ID, StartTime, EndTime, Recorder, Filename)
我希望将事件数据添加到视频数据中,以便为每个事件获取视频文件名。记录器字段用于指定在事件发生时可操作的记录器,并协助多个记录器同时记录视频。
如果我不关心没有视频的事件,那很好(我可以获取SQL),但是在我的情况下,我希望显示最接近的视频文件名和秒数差异。
编辑
样本数据
大事记
1, EV1, 2012-01-01 12:00, A
2, EV2, 2012-01-01 13:00, B
3, EV3, 2012-01-01 12:15, B
4, EV4, 2012-01-01 11:45, A
视频
1, 2012-01-01 12:00, 2012-01-01 12:30, A, 1.mpg
2, 2012-01-01 13:00, 2012-01-01 13:30, A, 2.mpg
3, 2012-01-01 12:00, 2012-01-01 12:30, B, 3.mpg
结果(EventID,VideoID,文件名,IsBetween,secondsDifference)
1, 1, 1.mpg, TRUE, 0
2, 3, 3.mpg, FALSE, 1800 //1800 seconds from the end of video 3
3, 3, 3.mpg, TRUE, 900
4, 1, 1.mpg, FALSE, 900 //900 seconds from the start of video 1
奖金
如果最近的视频没有考虑到录像机(但要考虑到第一个界限(开始和结束)),我会更好。如果这太困难了,那就可以了。
这有点笨拙,但这是我想出的:
SELECT
*
FROM
(
SELECT
a.ID AS EventID,
b.ID AS VideoID,
b.Filename,
(
CASE
WHEN a.Time < b.StartTime THEN UNIX_TIMESTAMP(b.StartTime) - UNIX_TIMESTAMP(a.Time)
WHEN a.Time > b.EndTime THEN UNIX_TIMESTAMP(a.Time) - UNIX_TIMESTAMP(b.EndTime)
END
) AS distance_factor
FROM
`Events` a
CROSS JOIN
video b
WHERE
NOT EXISTS
(
SELECT NULL
FROM Video
WHERE a.Time BETWEEN StartTime AND EndTime
)
) c
WHERE
c.distance_factor =
(
SELECT
MIN(CASE WHEN d.Time < e.StartTime THEN UNIX_TIMESTAMP(e.StartTime) - UNIX_TIMESTAMP(d.Time) WHEN d.Time > e.EndTime THEN UNIX_TIMESTAMP(d.Time) - UNIX_TIMESTAMP(e.EndTime) END)
FROM
`Events` d
CROSS JOIN
video e
WHERE d.ID = c.EventID
)
GROUP BY
c.EventID
这会返回事件的日期不在任何视频的任何时间范围之间的事件,但是会返回与该事件日期最接近的视频。
现在唯一的一件事就是有些视频的秒差完全一样。我不知道您是否希望它返回2行,但是现在,我将GROUP BY放在其中,只选择其中一行。
让我知道它是如何工作的。
我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!
我有一个测试数据库,每个测试都有一个StartTime和(对于那些完成的)EndTime值。我想创建一个查询,显示每小时运行的测试数量。 i、 e.在任何给定时间有开始时间但没有结束时间的测试。 我解决了分组问题——感谢@p.cambell对问题SQL Server Group by Count of DateTime Per Hour的回答?
我想从JavaGUI到数据库获取startTime和endTime的值。 电脑座位班 Cobadatabase类 这里的问题是,当单击登录按钮时,开始时间显示在我的数据库中的开始时间和结束时间列上。当单击注销按钮时,将在数据库中创建另一个行,该行在starTime和endTime列上都包含endTime。我想知道为什么会这样...
是否可以跟踪卡桑德拉的“预订”? 基本上,我的大多数查询将涉及一个和一个,我希望在其中找到与该时间相交的所有保留。 我的模式如下所示: 我输入了一些数据,如下所示: 我正在尝试这样的查询: 我得到一个这样的错误: 我认为这是可以做到的,因为在这个SO问题中似乎是这样的:在cassandra中存储时间范围 但是,架构没有发布,我们也没有使用pycassa,而且我似乎无法弄清楚如何将其映射到CQL。
我想找到列表中任意2个值之间的最小距离。然而,考虑到顺时针和逆时针运动,我需要最小的距离。 例如,我有列表[0, 4, 5, 6, 3, 1]。说我想要一对之间的距离(4,1) 按“顺时针”移动,考虑到指数差异,结果明显为4。但是,如果一个人“逆时针”移动并认为列表已连接,那么0是1的邻居。距离是2,这是我想要的结果。 我该如何实现这一点? 我想加入名单。 [0, 4, 5, 6, 3, 1, 0