2017-06-08 46 views
0

運行一個查詢,該查詢具有多行,顯示在星期六/星期日運行的計劃作業之後的before和after狀態下的db table統計信息。如何過濾特定列的最新值

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   

由於該批次總是會循環,我想過濾此查詢只返回最近batchNum行最近一個週末,任何時候我運行它通過了一年。

回答

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; 
+0

這做到了。我不確定我是否準確地描述了需求,但是這正是我所期望的。 – Doctorj77

+0

@ Doctorj77確保嘗試其他方法並比較查詢計劃。一個可能比另一個更有效率。另外,你會學到一些東西,希望 –

0

做一個子查詢與此在選擇和所有其他數據,您需要:

ROW_NUMBER() OVER(PARTITION BY tableName ORDER BY batchNum DESC) [rownum] 

然後採取WHERE rownum = 1外部查詢

0

您是否在尋找最近的批次和rundate記錄然後你可以查詢如下:

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) 
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 
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