无法使用 SQL Server Management Studio 获取时间段内的值
Posted
技术标签:
【中文标题】无法使用 SQL Server Management Studio 获取时间段内的值【英文标题】:Cannot get the values in time period using SQL Server Management Studio 【发布时间】:2016-11-18 09:06:38 【问题描述】:让我解释一下过程:
-
我们有一份扫描问卷。
OCR 系统处理这些问卷以获取数据。
然后所有识别的数据(form_id、question_number、answer 等)都进入数据库。
对于每个表单,数据库中大约有 120-150 行:
53453, 1, A, 2016-10-30 23:54:18.590
53453, 2, B, 2016-10-30 23:54:18.690
53453, 3, C, 2016-10-30 23:54:18.790
等等
如您所见,在数据库中找到重复的问卷表已经够难的了。 SQL不是我的强项所以需要你的帮助)我需要根据条件选择ID:插入时间差1分钟不重复。但是,如果 ID 存在于另一个时代的其他地方,那将是重复的。 附言我尽力解释我的问题。对不起我的英语)
【问题讨论】:
【参考方案1】:确保你最后一列的数据类型是 DATETIME :
SELECT tA.*
FROM MyTable tA INNER JOIN MyTable tB ON (tA.ID = tB.ID AND tA.question_number = tB.question_number AND tA.answer = tB.answer)
WHERE DATEDIFF(minute,tA.DateColumn,tB.DateColumn) < 2 -- DATEDIFF returns INT
【讨论】:
【参考方案2】:您只检查ID还是问答?我只为 ID 和 Date 编写了查询,因为您说如果 ID 存在于其他行中且时间不同(差异超过一分钟 - 它是重复的),您不会说任何关于检查答案/问题的内容。在最后一行我修改了时间。
DECLARE @TMP TABLE (
ID INT,
VALUE INT,
VALUE2 VARCHAR(5),
DATES DATETIME
)
INSERT INTO @TMP
SELECT 53453, 1, 'A', '2016-10-30 23:54:18.590'
INSERT INTO @TMP
SELECT 53453, 2, 'B', '2016-10-30 23:54:18.690'
INSERT INTO @TMP
SELECT 53453, 3, 'C', '2016-10-30 23:56:20.590'
SELECT ID, MIN(DATES) DATES
INTO #TMP_ID
FROM @TMP
GROUP BY ID
-- MORE THAN MINUTE
SELECT *
FROM @TMP T
WHERE EXISTS (
SELECT NULL
FROM #TMP_ID X
WHERE DATEDIFF(second, x.dates, t.DATES) > 60
and x.id = t.id
)
-- LESS THAN MINUTE
SELECT *
FROM @TMP T
WHERE NOT EXISTS (
SELECT NULL
FROM #TMP_ID X
WHERE DATEDIFF(second, x.dates, t.DATES) > 60
and x.id = t.id
)
DROP TABLE #TMP_ID
【讨论】:
以上是关于无法使用 SQL Server Management Studio 获取时间段内的值的主要内容,如果未能解决你的问题,请参考以下文章
Software Project Managemen(SPM) HOMEWORK01:
IIS无法使用SQL Server身份验证连接到SQL Server