如何检查 sql 中是否有最近 2 天的数据

how to check if there is data for the last 2 days in sql

我想检查用户是否提交了过去 2 天的数据。我的 table 中有 2 个字段:USERID 和 DATE_SUBMITTED。我的 table 中确实有过去 2 天的数据,但我的查询没有返回任何数据。我在这里做错了什么:

select distinct [UserID], DT_Submitted 
from myTable 
where [UserID] = 'Joe'
  and DT_Submitted = (select CAST(FLOOR( CAST( GETDATE()-1 AS FLOAT ) )AS DATETIME))
  and DT_Submitted = (select CAST(FLOOR( CAST( GETDATE()-2 AS FLOAT ) )AS DATETIME))

谢谢

您想查找USERID 昨天和前天提交的记录。你需要这样的东西:

SELECT
    userID,
    Dt_Submitted
FROM
    myTable
WHERE
    userid = 'Joe' AND
    userid IN (SELECT distinct userid FROM myTable Where Dt_Submitted = dateadd(day, -2, getdate())) AND
    userid IN (SELECT distinct userid FROM myTable Where Dt_Submitted = dateadd(day, -1, getdate()))

如果您有更新版本的 SQL 服务器使用 Window 函数:

SELECT
    *
FROM
    (
        SELECT
            userID,
            Dt_Submitted, 
            CASE 
                WHEN
                    MAX(Dt_Submitted) OVER (PARTITION BY userid ORDER BY dt_submitted ROWS UNBOUNDED PRECEDING) = dateAdd(day, -1, dt_submitted) ORDER
                    MIN(Dt_Submitted) OVER (PARTITION BY userid ORDER BY dt_submitted ROWS UNBOUNDED FOLLOWING) = dateAdd(day, +1, dt_submitted)
                THEN 'X' as keeptest

        FROM
            myTable
        WHERE
            userid = 'Joe' AND
    )sub
WHERE keeptest = 'X'

或使用 JOIN 删除记录(与第一个非常相似):

SELECT
    t1.userID,
    t1.Dt_Submitted
FROM
    myTable t1
    INNER JOIN (SELECT distinct userid, dt_submitted FROM myTable Where Dt_Submitted = dateadd(day, -2, getdate())) t2 ON
        t1.userid = t2.userid
        AND t1.dt_submitted = t2.dt_submitted
    INNER JOIN (SELECT distinct userid,dt_submitted FROM myTable Where Dt_Submitted = dateadd(day, -1, getdate())) t3 ON
        t1.userid = t3.userid
        AND t1.dt_submitted = t3.dt_submitted
WHERE
    t1.userid = 'Joe'

以前的人已经回答了,但我相信他们工作太辛苦了,可能使用了更多的资源与多个连接和差异等...试试这个。

SELECT  UserID,
        DT_Submitted INTO myTable
FROM
(
    --Submitted both days
    SELECT 'Joe' UserID,DATEADD(DAY,-1,GETDATE()) DT_Submitted
    UNION ALL
    SELECT 'Joe' UserID,DATEADD(DAY,-2,GETDATE()) DT_Submitted
    UNION ALL
    --Submitted one day
    SELECT 'Bob',DATEADD(DAY,-1,GETDATE()) DT_Submitted
    UNION ALL
    --Submitted 5 days ago
    SELECT 'Helen',DATEADD(DAY,-5,GETDATE()) DT_Submitted
) A

SELECT *
FROM
(
    SELECT  UserID,
            --All this does is count the submissions in the past two days and then adds them up
            SUM(CASE
                    WHEN CAST(DT_submitted AS DATE) =  DATEADD(DAY,-1,CAST(GETDATE() AS DATE)) THEN 1
                    WHEN CAST(DT_submitted AS DATE) =  DATEADD(DAY,-2,CAST(GETDATE() AS DATE)) THEN 1
                    ELSE 0          
                END) AS submissions 
    FROM myTable
    GROUP BY UserID
) A
WHERE submissions = 2

结果:

UserID submissions
------ -----------
Joe    2