我有一張表格,大約每15分鐘記錄一次逆變器的信息。變頻器發送的其中一個數據是kwhtotal
,這是一個數字,表示通過該變頻器已經產生了多少總功率。我試圖讓查詢正確獲取特定日期的電力。爲此,我需要檢索前一天的最後一次讀數,並將其與當天的最後一次讀數進行比較。獲取兩個不同日期的數據庫中的最後一個條目並計算差異
這是我到目前爲止有:
DateTime prevStartD = new DateTime((utcStartingDate.AddDays(i - 1)).Year, (utcStartingDate.AddDays(i - 1)).Month, (utcStartingDate.AddDays(i - 1)).Day, 0, 0, 0);
DateTime prevEndD = new DateTime((utcStartingDate.AddDays(i - 1)).Year, (utcStartingDate.AddDays(i - 1)).Month, (utcStartingDate.AddDays(i - 1)).Day, 23, 59, 59);
var previousDay = (from s in db.PowerInverterHistorys
join u in db.PowerInverters on s.inverter_id equals u.id
where u.name == record && (s.recordTime >= prevStartD && s.recordTime <= prevEndD)
orderby s.recordTime descending
select new
{
s.recordTime,
s.kwhtotal
}).Take(1);
DateTime currStartD = new DateTime((utcStartingDate.AddDays(i)).Year, (utcStartingDate.AddDays(i)).Month, (utcStartingDate.AddDays(i)).Day, 0, 0, 0);
DateTime currEndD = new DateTime((utcStartingDate.AddDays(i)).Year, (utcStartingDate.AddDays(i)).Month, (utcStartingDate.AddDays(i)).Day, 23, 59, 59);
var currentDay = (from s in db.PowerInverterHistorys
join u in db.PowerInverters on s.inverter_id equals u.id
where u.name == record && (s.recordTime >= currStartD && s.recordTime <= currEndD)
orderby s.recordTime descending
select new
{
s.recordTime,
s.kwhtotal
}).Take(1);
double? pDay = 0, cDay = 0;
foreach (var p in previousDay) { pDay = p.kwhtotal; }
foreach (var c in currentDay) { cDay = c.kwhtotal; }
var generatedPower = cDay - pDay;
它的工作原理和運行,但它是低效的。運行頁面需要很長時間才能打開。 有什麼我可以做的,以加快這個查詢?我需要做的是從當天最後一個條目的kwhtotal
中減去前一天最後一個條目的kwhtotal
。
正在改變數據庫的一個選項?它可能會破壞規範化,但是存儲這兩個值的表(僅限它們的當前版本)會大大簡化事情。 – 2012-08-01 21:15:46
或者如果可能的話創建materiazed視圖。 – devundef 2012-08-01 21:28:39