簡體   English   中英

SQL:使用DATEPART和內部聯接

[英]SQL: using DATEPART and Inner join

我逐漸熟悉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 Compact!)

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

應該與此類似:當然,如果沒有示例數據,很難進行測試,但是您可以根據需要進行調整。

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

您可以在第一個查詢中提供所需的所有信息,而無需內部聯接,因為您是在同一張表中進行請求。 像以下查詢這樣的東西應該可以每周返回一次數據。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM