如何用SQL语句筛选相差5分钟以内的所有数据

如何用SQL语句筛选相差5分钟以内的所有数据,第1张

你是这个意思吧:

查询这样的一条数据:存在另外一条数据的时间项和它的时间项相差在5分钟以内。

这个主要是处理日期函数,我用Oracle数据库做,

首先建立测试表:

create table test26

(

mydate date

)

然后插入测试数据:

insert all

into test26 values(to_date('2010-04-01 12:00:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-01 12:03:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-02 12:00:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-03 14:00:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-03 14:01:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-03 14:02:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-06 12:00:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-07 11:00:00','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-07 11:04:59','yyyy-mm-dd hh24:mi:ss'))

into test26 values(to_date('2010-04-08 12:00:00','yyyy-mm-dd hh24:mi:ss'))

select from dual

然后查询这样的一条数据:存在另外一条数据和它相差在5分钟以内。

select to_char(t1mydate,'yyyy-mm-dd hh24:mi:ss') from test26 t1

where exists

(

select from test26 t2 where

((t1mydate-t2mydate)<(1/(2412)) and t1mydate>t2mydate)

or ((t2mydate-t1mydate)<(1/(2412)) and t2mydate>t1mydate)

and t1mydate<>t2mydate

)

order by t1mydate

结果为:

TO_CHAR(T1MYDATE,'YYYY-MM-DDHH24:MI:SS')

2010-04-01 12:00:00

2010-04-01 12:03:00

2010-04-03 14:00:00

2010-04-03 14:01:00

2010-04-03 14:02:00

2010-04-07 11:00:00

2010-04-07 11:04:59

不同数据库的日期处理函数不一样,还有什么问题给我留言,OK?

--2 使用游标将SPJ表中的偶数行输出。

if OBJECT_ID('tmp_yy') is not null drop table tmp_yy

select ,ROW_NUMBER() over (order by qty)1 aa into tmp_yy

from spj

--select from tmp_yy

declare @i nvarchar(50)

declare @sql nvarchar(max)

declare cursor1 cursor for

select aa from tmp_yy

open cursor1

fetch next from cursor1 into @i

while @@fetch_status=0

begin

if (@i%2)100=0 and @i>1

begin

set @sql='select sno,pno,jno,qty from tmp_yy where aa='+@i

end

else

exec (@sql)

fetch next from cursor1 into @i

end

close cursor1

deallocate cursor1

--6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。

create proc uspdeleteSPJ

@SNO nvarchar(5)

as

begin

delete from spj where sno=@SNO

end

--exec uspdeleteSPJ 's1'

--7.创建存储过程,将指定零件的重量增加指定的值。

create proc uspaddP

@pno nvarchar(5),

@weight int

as

begin

update p表 set weight=weight+@weight where pno=@pno

end

exec uspaddP 'p1',10

--8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少于300,

--如果少于则自动改为300。

alter TRIGGER triggerSB ON spj

FOR insert

AS

if(SELECT COUNT() FROM inserted WHERE QTY <300)>0

BEGIN

update spj set QTY=300

WHERE QTY <300

commit TRANSACTION

END

GO

select adingzhi-bqvxiao from

(select count() as dingzhi from tb where [用户id]='001' and [用户订购关系]=1) a,

(select count() as qvxiao from tb where [用户id]='001' and [用户订购关系]=2) b

=============================

给你个思路,

用存储过程解决,先建个临时表#tb_yuanlai将原来的表拷贝进去,

然后在原来的表中用select distinct [用户id] from 原来表语句在建立个临时表#tb,然后用游标将临时表中#tb中一条条的[用户id]数据取出来用最上面的语句去减,并判断将结果,最后在写入一个新的临时表中,用select 语句返回这个最终临时表的所有结果即可。

我暂时只想到这个方法,有不妥之处还请高手们指点了。希望能帮到你

不知道你什么数据库

如果

Oracle

,

倒是很省事。

创建一个序列号,

2个表共用。

A表插入的时候,取

下一个序列号,

B表插入的时候,取当前序列号。

如果是

SQL

Server

或者

MySQL

这种,用数据库系统自增的。

就自己控制好,别插入一条A,再插入两条B这种情况发生。

不过如果发生异常,还是会导致不匹配的。

例如首先插入A,

某些

Check

没通过,数据没插入,但是那个自增的ID可能被递增了。

想返回表A中最大的id和表B中最大的id的差值

倒是很简单

SELECT

MAX(Aid)

-

MAX(Bid)

AS

差值

FROM

A

FULL

JOIN

B

ON

(Aid

=

Bid)

select TO_DATE(TO_CHAR(sysdate,'YYYYMMDD'),'YYYYMMDD') - TO_DATE(表字段,'YYYYMMDD') from 表名;

表名和表字段根据具体情况而定,

还有

date1为数据库里输入数据时的时间,date2为当前系统时间

应该是反的,date1应该是当前系统时间,date2是数据库里输入数据时的时间

SQL数据库语句大全:

1、选择:selectfromtable1where范围

2、插入:insertintotable1(field1,field2)values(value1,value2)

3、删除:deletefromtable1where范围

4、更新:updatetable1setfield1=value1where范围

5、排序:selectfromtable1orderbyfield1,field2[desc]

6、总数:selectcountastotalcountfromtable1

7、求和:selectsum(field1)assumvaluefromtable1

几个高级查询运算词:

A、UNION运算符

UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。

B、EXCEPT运算符

EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPTALL),不消除重复行。

C、INTERSECT运算符

INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。当ALL随INTERSECT一起使用时(INTERSECTALL),不消除重复行。

以上就是关于如何用SQL语句筛选相差5分钟以内的所有数据全部的内容,包括:如何用SQL语句筛选相差5分钟以内的所有数据、数据库用T—SQL写下列语句、sql 求差等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9869373.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存