通过sql语句过滤每个部门最近的一条记录的

通过sql语句过滤每个部门最近的一条记录的,第1张

你设么数据库,oracle的话可以用连接(||)直接查,其他数据库,可能不能连接直接查,可以用到rank(或row_number也可以,个人建议用rank,假设同一个发起日期有两条数据,那么rank会把数据都列出来。)开窗函数

oracle用下面的语句应该没问题,但是其他数据库好像不能直接这么用,需要再套上一层select

select from table1 where department||date= (select departent||max(date) from table1 group by department)

至于rank的用法有人写了,我就不赘述了。

不知道你是什么数据库,所以就给你写了三种方式:

SqlServer:

select top 5000 from tab1 where read=1

Oracle:

select from tab1 where read=1 and rownum<=5000;

MySql:

select from tab1 where read=1 limit 5000;

在access中和在SqlServer中是一样的,如果你的id是连续的话统统都可以这样写:

select from tab1 where id<=5000 and read=1

以上,希望对你有所帮助!

你的表述我没看得太清, “根据type类型的不同” 统计是否忽略了city_id

最好 举个例子说明一下期望的算法

我根据你的表述,猜测你这里包含两层分组业务,

第一,根据city_id进行分组, 后用分组结果进行比较再次统计

如果你是10g或以上,可以试试以下语句

with grp1 as ( select sum(ws_succ)ssucc, sum(ws_stat) sstat ,city_id ,type

from tab_open_success_ratio

where ws_stat>0

group by city_id ,type)

select sum(ssucc)10000/sum(sstat),sum(sstat),type

from grp1

group by type

如有表A(col1,col2,col3)

要过滤col1,col2,col3都相同的数据时可以用distinct

如select distinct col1,col2,col3 from A

如只要过滤col1,col2相同的数据,且取col3最大值时可以如下

select col1,col2,max(col3) as col3 from A group by col1,col2

declare @cur cursor

declare @n nvarchar(500)

declare @r as int

declare @sql nvarchar(500)

set @cur= cursor for

SELECT name FROM sysobjects WHERE (xtype = 'u')

open @cur

FETCH NEXT FROM @cur INTO @N

WHILE @@FETCH_STATUS = 0

BEGIN

set @sql ='if not exists(SELECT FROM ' + @n + ') drop table ' + @n

--exec sp_executesql @sql --我先注释了这一行,注意危险,你确认一下

print @sql

FETCH NEXT FROM @cur INTO @N

END

你的问题是改了又改,我的回答也改了又改

上面的回答中: exec sp_executesql @sql 就把没有行的表给删除了,看注释

如果你要列出表的话,如下:

set nocount on

declare @cur cursor

declare @n nvarchar(500)

declare @r as int

declare @sql nvarchar(500)

set @cur= cursor for

SELECT name FROM sysobjects WHERE OBJECTPROPERTY(id, N'IsUserTable') = 1

declare @tb table (name nvarchar(50) ,rows int)

open @cur

FETCH NEXT FROM @cur INTO @N

WHILE @@FETCH_STATUS = 0

BEGIN

set @sql = 'select @c=count () from ' + @n

print @n

exec sp_executesql @sql, N'@c int output',@c=@r output

insert into @tb (name,rows) values(@n,@r)

FETCH NEXT FROM @cur INTO @N

END

--select from @tb --如果你要每个表名称和行数

select name from @tb where rows=0 --这样就是没有记录的表名

手工打字,可能出错,还是要你自己测试一下,

要这点分数还真有点难

打开Microsoft SQL Server Management Studio , 在菜单栏有个工具(Tool), 里面有个事件追踪(SQL Server Profiler)。

打开sql server profiler, 连接数据库。d出Trace Properties(跟踪属性), 选择事件(Events Selection),右下角选择Show All Columns(选择所有列), 点击列过滤(Columns Filters)按钮。在里面就有HostName 设置电脑的主机名

以上就是关于通过sql语句过滤每个部门最近的一条记录的全部的内容,包括:通过sql语句过滤每个部门最近的一条记录的、sql语句问题,搜索前5000条数据再过滤、数据库进行SQL分组查询后再过滤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/sjk/9659347.html

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

发表评论

登录后才能评论

评论列表(0条)

保存