2017-08-30 32 views
-1

特有的價值觀我有SQL表下面的名字TEST_T基於一個塔和其他列的SQL

SKU_ID  DC_ID   CRT_DTTM     FIELD_NAME TOTAL 
------------------------------------------------------------------------ 
sku1  dc1  2017-08-02 02:28:41.711   FIELD1  5 
sku1  dc1  2017-08-01 01:28:41.711   FIELD1  4    
sku2  dc1  2017-08-02 03:12:10.064   FIELD1  6 
sku2  dc1  2017-08-01 04:12:10.064   FIELD1  1   
sku3  dc2  2017-08-02 07:32:46.795   FIELD1  3    
sku4  dc2  2017-08-02 10:44:09.347   FIELD1  2 

而且有很多不同DC_ID的記錄,上面只是舉例。 我有這將總結道達爾對所有具有DC_ID爲DC1記錄的以下工作查詢

select A.DC_ID , sum(TO_NUMBER(A.TOTAL)) as SUM FROM (
Select A.DC_ID, A.SKU_ID, A.CRT_DTTM, A.FIELD_NAME, A.TOTAL 
FROM TEST_T A 
INNER JOIN (
Select DC_ID, FIELD_NAME, Max(CRT_DTTM) as LatestDate, SKU_ID from TEST_T 
Where DC_ID = 'dc1' 
AND FIELD_NAME = 'FIELD1' 
Group By DC_ID, FIELD_NAME, SKU_ID 
) B 
on A.CRT_DTTM = B.LatestDate 
and A.SKU_ID = B.SKU_ID 
and A.DC_ID = B.DC_ID 
and A.FIELD_NAME = B.FIELD_NAME) 
Group By A.DC_ID; 

,這將給結果作爲

A.DC_ID  SUM 
--------------- 
dc1   11 

如何修改上面的查詢中通用的方式來處理很多很多DC_ID的這樣一種方式,我會得到的結果如下

A.DC_ID  SUM 
--------------- 
dc1   11 
dc2   5 
dc3   7 
dc4   9 
dc5   18 
etc..... 
+0

改變你的'where'條件的子查詢:'凡DC_ID =「DC1」 和FIELD_NAME =「FIELD1''是什麼阻止其他'dc_id'。 – SqlZim

+0

我相信這是因爲你加入了'dc1'的最新日期,即'2017-08-02 03:12:10.064'。將日期轉換爲「日期」以獲得您想要的。 –

+0

你已經標記了這個問題sql-server,但是微軟的sql server不支持'to_number'。你正在使用哪種RDBMS? –

回答

3

你的輸出可以簡單地通過下面的查詢實現。你沒有解釋爲什麼你創建了內部子查詢和連接。如果您解釋該查詢可能會有所不同

select dc_id, sum(Total) as_sum from test_t Group by DC_ID 

您也可以嘗試以下查詢。我沒有測試的結果,但它給你使用的rank

select dc_id,sum(_sum) _sum from 
    (
    select sum(total) over partition by(Dc_ID) as _sum, 
    rank() over partition by(Dc_ID,skuid order by CRT_DTTM desc) as rno, 
    dc_ID 
    ) t 
    where rno=1 
Group by DC_ID 

早些時候問題的想法是標籤與sql-server這樣的答案是根據,沒有它可以幫助別人使用SQL server

+0

我需要內部查詢以獲取特定dc_id的最新記錄 – Digital

+0

爲什麼你需要最新的記錄,因爲你沒有在你想要的輸出中使用任何東西。你想和dc_id一起記錄test_t表的最新記錄的一些列嗎? – Tassadaque

+0

我需要計算所有最新的skuIds記錄的TOTAL列的總和爲特定的dc_id – Digital

0

爲什麼你使用複雜的查詢,你需要一個簡單的查詢,如下面的代碼

select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T group by DC_ID 
現在

,如果你需要一些字段,你可以使用下面

碼的地方
select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T where FIELD_NAME = 'FIELD1' group by DC_ID 

,如果你需要更多的幫助,請讓我知道...