‘壹’ sql借阅图书时间超过3个月怎么计算
假设借书记录表里面,有个 [借书日期] 的字段
那么使用
DATEDIFF(dd, [借书日期] , GETDATE())
将返回 从借书日期开始,到今天,总共过了多少天。
然后
SELECT
CASE
WHEN ( DATEDIFF(dd, [借书日期] , GETDATE()) > 30 ) THEN
( DATEDIFF(dd, [借书日期] , GETDATE()) - 30 ) * 0.1
ELSE
0.0
END AS 罚款金额
FROM
借书记录表
‘贰’ 如何写连续三个月有记录的sql
SQL> select org_id , person_id
2 from
3 (
4 select org_id , person_id ,
5 count(*) over ( partition by org_id , person_id order by month_num range 2 preceding ) ttt
6 from test)
7 /
select org_id , person_id
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
‘叁’ sql 查询 3个月内
DATEDIFF 函数 [日期和时间]格式:DATEDIFF ( date-part, date-expression-1, date-expression-2 );功能:
返回两个日期之间的间隔,即date-expression-2 减 date-expression-1的以date-part为单位的值。例子:SELECT datediff( month, '1999/07/19', '1999/08/23' );//返回 1
SELECT datediff( day, '1999/07/19 00:00', '1999/07/23 23:59' );//返回 4----------------------------------------------------------------------------------------------------修改:select * from OrderList where UserName='"&Session("UserName")&"' and datediff(Month,BuyTime,getdate(),Now) <=3"
‘肆’ sql 求出连续三个月以上用户金额为0的数据
创建表,插入数据:
createtabletest
(年度varchar(4),
月份varchar(2),
识别号varchar(20),
店名称varchar(50),
金额int)
insertintotestvalues(2016,1,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,2,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,3,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,3,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,3,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,4,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,4,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,4,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,5,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,5,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,6,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,6,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,7,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,9,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
insertintotestvalues(2016,10,'2201041958080801','大庆市萨尔图区许驰比萨店',0)
insertintotestvalues(2016,10,'2201041958080801','哈尔滨市南岗区许驰比萨店',0)
insertintotestvalues(2016,10,'2201041958080801','绥化市北林区城市比萨绥化店',0)
insertintotestvalues(2016,10,'23010219580302041301','哈尔滨中央大街金店',0)
insertintotestvalues(2016,11,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
insertintotestvalues(2016,12,'12232700556141546K','大兴安岭地区建设工程交易中心',0)
执行:
withtas
(select年度+right('0'+月份,2)+'01'日期,识别号,店名称,金额,row_number()over(partitionby店名称orderby年度+right('0'+月份,2)+'01')rnfromtestwhere金额=0)
selectsubstring(a.日期,1,4)年份,substring(a.日期,5,2)月份,a.识别号,a.店名称,a.金额fromta,
(selectt2.日期,t2.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull
union
selectt1.日期,t1.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull)b
wherea.日期=b.日期anda.店名称=b.店名称
anda.店名称in
(selecta.店名称fromta,
(selectt2.日期,t2.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull
union
selectt1.日期,t1.店名称fromtt1leftjointt2on
t1.店名称=t2.店名称anddatediff(mm,t2.日期,t1.日期)=1andt1.rn-t2.rn=1wheret2.日期isnotnull)b
wherea.日期=b.日期anda.店名称=b.店名称groupbya.店名称havingcount(*)>=3)
orderbya.店名称,a.日期
结果:
有可能是写麻烦了,先看看吧
‘伍’ 讨论一个SQL问题 :关于最近三个月平均消费
由于表的名字,是随着时间,不断变化的. 需要使用动态 SQL 来处理。
同时要求 话费表的 表名字, 要有点规律。
例如:
HF_201103: 手机号码,3月话费消费
HF_201104: 手机号码,4月话费消费
HF_201105: 手机号码,5月话费消费
HF_201106: 手机号码,6月话费消费
这样的话,存储过程,可以通过 获取当前日期, 向前推算出 前3个月的表的名字。
如果没有上面的问题的话。
那就是
请写出SQL语句 姓名,近三个月的平均消费
SELECT
表1.姓名,
AVG(a3M.话费消费)
FROM
表1 JOIN
(
SELECT 手机号码, 4月话费消费 AS 话费消费 FROM 表3 UNION ALL
SELECT 手机号码, 5月话费消费 AS 话费消费 FROM 表4 UNION ALL
SELECT 手机号码, 6月话费消费 AS 话费消费 FROM 表5
) a3M
ON (表1.手机号码 = a3M.手机号码)
GROUP BY
表1.姓名;
最近三个月平均消费大于或等于50元的手机号码.
SELECT
a3M.手机号码,
AVG(a3M.话费消费)
FROM
(
SELECT 手机号码, 4月话费消费 AS 话费消费 FROM 表3 UNION ALL
SELECT 手机号码, 5月话费消费 AS 话费消费 FROM 表4 UNION ALL
SELECT 手机号码, 6月话费消费 AS 话费消费 FROM 表5
) a3M
GROUP BY
a3M.手机号码
HAVING
AVG(a3M.话费消费) >= 50;
‘陆’ 时间为默认当期时间并累加3个月SQL语句如何写
使用sql自带的日期函数 DateAdd,例子如下,你可以适当改下自己的
select DateAdd(month,3,shijian) from USER
‘柒’ SQL提取3-8月中至少连续3个月的流量均大于50M的用户数。
存储过程一步一步的处理吧,这个是个需要逻辑的sql了
固定的月份,给个比较死板的思路给你吧
1、循环,8-3次,包含8月就需要8-3+1次,不包含就8-3次,当然循环的数包含8月就从8开始,不包含就从7开始了
2、从大到小,循环时
a.找出大于50M的用户,在查询前两个月,进一步筛选出大于50M的人员,存入到临时表
3、将临时表去重,得到你需要的人员,临时表可以只存ID,也可以存其他的内容,或者你使用表变量也行,如果数据量大的话,建议你用临时表,不大建议用表变量,不管是存什么数据,只要有ID,所有数据就任你查了
‘捌’ 用sql语句查询金额大于50元的记录怎么写
select * from 表名 where 金额字段名 > 50;
把上述语句中的中文描述换成实际名称即可。这是最基本的SQL语句,建议题主找一些SQL方面的书学习一下。
‘玖’ SQL查询最近三个月的数据(查询最近几天,几
1、创建测试表,create table test_date2(id number, v_date date);