SQL 查询今天、昨天、7天内、30天的数据

SQL 查询今天、昨天、7天内、30天的数据,第1张

主要用到sql 函数 

DATEDIFF( datepart , startdate , enddate )

startdate=日期字段名称

--查询 今日

select * from tableA where DateDiff(dd,datetime类型字段,getdate())= 0

--查询 昨日

select * from tableA where DateDiff(dd,times,getdate())= 1

--查询 本周

select * from tableA where DateDiff(dd,VoucherDate,getdate())<=7

--查询 上周

select * from tableA where DateDiff(dd,VoucherDate,getdate())>7 and DateDiff(dd,VoucherDate,getdate())<=14

--查询 本月

select * from tableA where DateDiff(mm,VoucherDate,getdate())= 0

--查询 上月

select * from tableA where DateDiff(mm,VoucherDate,getdate())= 1

--查询 本年

select * from tableA where DateDiff(yy,VoucherDate,getdate())= 0

--查询 上一年

select * from tableA where DateDiff(yy,VoucherDate,getdate())= 1

这个需求可以通过查出顾客表中与日报表的差集来实现。

先假设数据结构如下

顾客信息表(顾客id,姓名)

日报表(id,顾客id,日期)

若这两张表的顾客id字段上设置了索引,可以使用下列sql语句,运行效率很高的

select a.顾客id,a.姓名 from 顾客信息表 a

where not exists (select 1 from 日报表 b

where b.顾客id=a.顾客id and b.日期>=

convert(varchar(10),getdate()-6,120) and

b.日期<convert(varchar(10),getdate()+1,120))

如果数据表很大,且没有可利用的索引则建议运行下列sql语句

select a.顾客id,a.姓名 from 顾客信息表 a

left join

(select distinct 顾客id from 日报表 where

日期>=convert(varchar(10),getdate()-6,120)

and 日期<convert(varchar(10),getdate()+1,120)) b on a.顾客id=b.顾客id

where b.顾客id is null


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/374929.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存