SQL不是我最大的优势,我需要一些帮助来构建一个select语句。
基本上,这是我的要求。该表存储名称列表以及在表中输入名称的时间戳。名称可以在一周内多次输入,但每天只能输入一次。
我希望select查询返回过去7天内随时输入的名称,但不是今天。
要获取今天输入的名单,这是我的声明:
Select * from table where Date(timestamp) = Date(now())
获取过去7天内输入的姓名列表,不包括今天:
Select * from table where (Date(now())- Date(timestamp) < 7) and (date(timestamp) != date(now()))
如果第一个查询返回一个集合或结果,比如A,第二个查询返回B,我该怎么办?
B-A
答案 0 :(得分:4)
如果您正在使用SQL Server,请尝试此操作:
SELECT * FROM Table
WHERE Timestamp BETWEEN
dateadd(day,datediff(day,0,getdate()),-7),
AND dateadd(day,datediff(day,0,getdate()),0)
这可确保时间戳介于00:00 7天前和00:00之间。今天的时间大于00:00的参赛作品将不包括在内。
答案 1 :(得分:3)
简单地说,您需要第二个查询中的记录,其中名称不在您的第一个查询中。在SQL中:
Select *
from table
where (Date(now())- Date(timestamp) < 7)
and (date(timestamp) != date(now()))
and name not in (Select name
from table
where Date(timestamp) = Date(now())
)
答案 2 :(得分:1)
not in
像
select pk from B where PK not in A
或者您可以执行类似
的操作Select * from table where (Date(now())- Date(timestamp) < 7) and (Date(now())- Date(timestamp) > 1)