sqlserver 查询数据表中每个类别最新的一条记录


本文此处所规定的类别为省份ID,原始表如下图所示:



所使用SQL语句为:

select a.* from tbl_MaterialPice a,(select province_ID,max(price_time) price_time from tbl_MaterialPice group by province_ID) b 
where a.price_time = b.price_time and a.province_ID = b.province_ID and material_ID='1' order by a.province_ID 

最终结果如下图所示;


### SQL Server 中查询表的数据行数 在 SQL Server 中有多种方法可以查询单个或多个表的数据行数。 #### 方法一:使用 `sys.dm_db_partition_stats` 动态管理视图 此方法适用于获取每个表的总行数并能提供更精确的结果: ```sql SELECT t.NAME AS TableName, s.row_count AS TotalRows FROM sys.tables t INNER JOIN sys.dm_db_partition_stats s ON t.OBJECT_ID = s.OBJECT_ID AND s.INDEX_ID IN (0,1) WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 GROUP BY t.NAME, s.row_count ORDER BY TotalRows DESC; ``` 这种方法通过连接系统目录视图 `sys.tables` 和动态管理视图 `sys.dm_db_partition_stats` 来统计各个用户定义表格中的行数[^1]。 #### 方法二:循环遍历所有表并通过 `COUNT(*)` 计算每张表的行数 这种方式适合于需要逐一对特定条件下的表进行处理的情况: ```sql DECLARE @tableName NVARCHAR(MAX), @rowCount INT, @sql NVARCHAR(MAX); SET @sql = ''; -- 假设已经有一个游标来迭代所有的表名... WHILE @@FETCH_STATUS = 0 BEGIN SET @rowCount = 0; SET @sql = 'SELECT @rowCount = COUNT(*) FROM ' + QUOTENAME(@tableName); EXEC sp_executesql @sql, N'@rowCount int OUTPUT', @rowCount=@rowCount OUTPUT; PRINT CONCAT('Table ', @tableName, ': ', @rowCount,' rows'); END ``` 这段脚本展示了如何构建一个可执行字符串以计算给定表内的行数,并利用 `sp_executesql` 存储过程传递参数和接收返回值[^2]。 #### 方法三:基于 `sysobjects` 和 `sysindexes` 的简单查询 对于较旧版本或者只需要基本统计数据的情况下,可以直接从元数据中读取预估的行数信息: ```sql SELECT A.name AS TableName, B.rows AS RowCount FROM sysobjects A JOIN sysindexes B ON A.id = B.id WHERE A.xtype = 'U' AND B.indid IN(0,1) ORDER BY B.rows DESC; ``` 这里选择了只考虑聚集索引(indid=1)或堆(indid=0),并且排除了系统对象(xtype='U')。注意该方式得到的是近似值而非实际行数[^3]。 以上三种方案各有优劣,在不同场景下可以选择最合适的一种实现需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值