2017-01-30 53 views
0

我讓自己熟悉DATEPART,在這種情況下是周部分,以獲得每週的結果等等。SQL:使用DATEPART和內部連接

我知道它適用於以下查詢。

var querytest = "SELECT DATEPART(wk, date), sum((kg * rep * sett)) as weight, 
sum(kg/max * rep * sett) as avg, sum((rep * sett)) as reps 
FROM Test WHERE date between @0 and @1 AND exercise < 4 GROUP BY DATEPART(wk, date)"; 

但是這並沒有真正做的一切,我想,我也可以不添加日期到該查詢,因爲它給了我錯誤。像這樣...sum((rep * sett)) as reps, date FROM

           ^

像上面那樣的日期。它給了我最後的分組錯誤。

但我想在下面的查詢中使用datepart(wk),任何想法如何做到這一點? (使用SQL Server精簡!)

var querythiss = "SELECT DATEPART(wk, date), SUM(kg * rep * sett) as weight, SUM(kg/max * rep * sett) as avg, SUM(rep * sett) as reps, " + 
       " t.date, pk.peak FROM Test t INNER JOIN (SELECT MAX(kg/max) as peak, date FROM Test WHERE date BETWEEN @0 AND " + 
       " @1 AND exercise < 4 group by date) as pk on t.date = pk.date WHERE t.date BETWEEN @0 AND @1 AND exercise < 4 GROUP " + 
       "BY t.date, pk.peak"; 

或者這樣,如果這是更容易閱讀。

SELECT DATEPART(wk, date), 
    SUM(kg * rep * sett) as weight, 
    SUM(kg/max * rep * sett) as avg, 
    SUM(rep * sett) as reps, 
    t.date, pk.peak 
FROM Test t INNER JOIN 
(
    SELECT MAX(kg/max) as peak, date 
    FROM Test 
    WHERE date BETWEEN @0 AND @1 
    AND exercise < 4 
    GROUP BY date 
) as pk on t.date = pk.date 
WHERE t.date BETWEEN @0 AND @1 AND exercise < 4 
GROUP BY t.date, pk.peak 
+0

您能添加錯誤信息嗎? – McNets

+0

在最後的查詢中,那個想要工作的__what錯誤_請發佈整個錯誤,而不是模糊的回憶它 –

+2

語法:需要別名'DATEPART(wk,t.date)'否則日期不明確。 – Serg

回答

2

應該類似於此:當然沒有樣本數據很難考,但可以根據需要調整。

SELECT pk.dateWeek, 
    SUM(kg * rep * sett) as weight, 
    SUM(kg/max * rep * sett) as avg, 
    SUM(rep * sett) as reps, 
    pk.peak 
FROM Test t 
INNER JOIN 
(
    SELECT MAX(kg/max) as peak, DATEPART(wk, date) as dateWeek 
    FROM Test 
    WHERE date BETWEEN @0 AND @1 
    AND exercise < 4 
    GROUP BY DATEPART(wk, date) 
) as pk on DATEPART(wk, t.date) = pk.dateWeek 
WHERE date BETWEEN @0 AND @1 
AND exercise < 4 
GROUP BY pk.dateWeek, pk.peak 
1

由於您是從同一張表中請求的,因此您可以在不需要內部聯接的情況下提供第一個查詢所需的所有信息。像下面的查詢應該爲每週數據返回工作。

SELECT DATEPART(wk, date) as wknumber, sum((kg * rep * sett)) as weight, 
sum(kg/max * rep * sett) as avg, sum((rep * sett)) as reps, 
max(kg/max) as peak 
FROM Test WHERE date between @0 and @1 AND exercise < 4 GROUP BY DATEPART(wk, date) 
+0

導致了這種情況,'在聚合和分組表達式中,SELECT子句只能包含聚合和分組表達式。 [Select clause =,date]',我對這個知之甚少,但是當我從一開始就使用這個查詢時,沒有使用datepart的東西,對內連接的需求是因爲我無法將MAX(.. )與SUM(..),因爲MAX只會給出一個結果,並且SUM會給出更多結果,因爲數據庫中有時會有多於一行的日期相同! –

+0

問題是我必須按表達式進行分組,而不是別名,我將用正確的查詢進行編輯。另外,由於sum和max都是聚合操作數,它們可以一起工作。 – AlbertoCh

+0

哇,這真的很酷!也許我以前的問題是由於我沒有使用datepart時按日期進行分組,還是仍然可以同時使用max和sum? –