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 服务器紧凑型!)
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
您可以从第一个查询中提供所需的所有信息,而无需内部联接,因为您是从同一个 table 请求的。类似于以下查询的内容应该适用于每周数据 return.
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)
我正在熟悉 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 服务器紧凑型!)
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
您可以从第一个查询中提供所需的所有信息,而无需内部联接,因为您是从同一个 table 请求的。类似于以下查询的内容应该适用于每周数据 return.
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)