我正在尋找一個SQL嚮導來幫助我解決一個小問題,我被告知我的代碼有點不起作用,並且可以通過更好的SQL查詢更好地解決問題,所以首先,這是我現在的代碼。SQL:按日期分組
var days = convertEndDate.Subtract(convertStartDate).TotalDays + 1;
for (int i = 0; i < days; i++)
{
var getData = "SELECT (kg*rep*sett) as weight, (kg/max) as avg, (rep*sett) as reps, date FROM Test WHERE date = @0 AND exercise < 4";
var getPeak = "SELECT MAX(kg/max) as peak FROM Test WHERE date = @0 AND exercise < 4";
db.Execute(getData, dt);
db.Execute(getPeak, dt);
//Resets the value to 0 for next foreach loop.
sumKG = 0;
totReps = 0;
avg = 0;
//Adds a day to the date its currently was checking.
nextDay = dt.AddDays(1);
dt = nextDay;
foreach (var c in db.Query(getData, dt))
{
var total = c.weight;
var reps = c.reps;
var calcAvg = c.avg * c.reps;
avg += calcAvg;
totReps += reps;
sumKG += total;
}
foreach (var d in db.Query(getPeak, dt))
{
if (d.peak != null)
{
peak = d.peak;
}
}
if (sumKG > 0)
{
var sumKGs = sumKG + "kg";
completeAvg = avg/totReps;
<a>@sumKGs, @dt.AddDays(-1).ToString("dd MMM, yyyy"), @completeAvg.ToString("0.#%"), @totReps, @peak.ToString("0.#%")</a> <br />
}
}
所以目前這樣做的工作,因爲我想它,但首先我輸入開始日期和結束日期,然後我計算這些天之間的天數,並用其作爲限制在我for
循環,即( 1 <日期之間的天數),然後foreach
循環獲取第一天的所有數據,然後重複循環,直到for
循環達到限制ofc。
但是,在選定日期之間是否有100天,它會運行SQL查詢100次,並且可能有更好的解決方案呢?還有,有兩個查詢,所以它會做一個查詢請求200次,這是因爲我無法弄清楚如何組合2個查詢,甚至不知道它是否有可能在使用MAX(kg/max)當數據庫中可能有許多行包含相同日期時,選擇一個值作爲另一個查詢選擇更多值的位置。
任何人都知道如何做得更好?
PS。不是MVC項目
誰曾告訴過你,這在SQL查詢中會做得更好,他是正確的,在一些示例數據中折騰並讓這個重構。就個人而言,當它涉及到你使用數據集的東西(作爲這個),而不是逐行...我會去SQL ...代碼背後(C#)我更多地用它來逐行計算。 – Veljko89