在Sat / Sun上运行的计划作业之后,在前后状态下运行包含多行显示数据库表统计信息的查询。
Select [batchNum] ,[RunDate] ,[tableName] ,[numberofRows] ,[dataSize]
FROM TableNames
ORDER BY RunDate ASC
前/后按批号区分。例如,该表的批号为2-159。在哪里' 158'是之前的'来自上周末运行的预定作业的作业/批次,批处理159将是之后的。
batchNum RunDate tableName numberofRows dataSize
158 06/04/2017 04:30:51 TableData1 1700 104
158 06/04/2017 04:30:51 TableData2 1276 99
158 06/04/2017 04:30:51 TableData3 1700 157
158 06/04/2017 04:30:51 TableData4 200 47
159 06/04/2017 05:30:51 TableData1 1500 85
159 06/04/2017 05:30:55 TableData2 1134 94
159 06/04/2017 05:30:57 TableData3 1500 101
159 06/04/2017 05:30:59 TableData4 167 40
由于批处理将始终是循环的,因此我想过滤此查询,以便在最近的一个周末只返回最近一次批处理的行。
答案 0 :(得分:1)
Select [batchNum], [RunDate], [tableName], [numberofRows], [dataSize]
FROM TableNames t1
where not exists(select *
from TableNames t2
where t2.batchNum > t1.batchNum)
ORDER BY RunDate ASC;
答案 1 :(得分:0)
在select和所需的所有其他数据中创建一个子查询:
WHERE rownum = 1
然后在外部查询
中取template<typename _Res, typename... _ArgTypes>
template<typename _Functor, typename>
function<_Res(_ArgTypes...)>::
function(_Functor __f)
: _Function_base()
{
typedef _Function_handler<_Signature_type, _Functor> _My_handler;
// don't need to care about details below, but when it uses __f, it
// either uses std::move, or passes it by references
if (_My_handler::_M_not_empty_function(__f))
{
_My_handler::_M_init_functor(_M_functor, std::move(__f));
_M_invoker = &_My_handler::_M_invoke;
_M_manager = &_My_handler::_M_manager;
}
}
答案 2 :(得分:0)
您是否正在寻找最新的批次和状态记录,然后您可以查询如下:
Select top 1 [batchNum], [RunDate], [tableName], [numberofRows], [dataSize]
From yourtable
Order by BatchNum desc, RunDate desc
如果您要查找每个批次的最新RunDate记录,那么您可以查询如下:
Select top(1) with ties [batchNum], [RunDate], [tableName], [numberofRows], [dataSize] From yourtable
Order by row_number() over(partition by BatchNum order by RunDate desc)
答案 3 :(得分:0)
试试这个
select * from (
Select [batchNum] ,[RunDate] ,[tableName] ,[numberofRows] ,[dataSize],
row_number() over(partition by tableName order by batchNum desc) rang
FROM TableNames
) tmp where rang=1
答案 4 :(得分:0)
其他解决方案:
with maxi as
(
select [tableName], max([batchNum]) MaxNum TableNames
group by [tableName]
)
Select f1.*
FROM TableNames f1
inner join maxi f2 on f1.tableName=f2.tableName and f1.batchNum=f2.MaxNum