无法使用 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:

SQL Server 2000无法使用

IIS无法使用SQL Server身份验证连接到SQL Server

sql server2005新创建的登录名无法登陆

sql server 2008 无法链接,急求,谢谢各位大侠

无法使用 PHP 连接到 SQL Server