我有以下數據結構。作爲存儲過程或表函數的計算值的T-SQL自定義排序/排序
表:
CalendarEvents
CalendarEventID
ACCOUNTID
FROM日期(DATETIMEOFFSET(7))
TODATE(DATETIMEOFFSET(7))
CalendarEventRepetition
CalendarEventID
星期一(位)
週二(位)
週三(位)
週四(位)
週五(位)
週六(位)
週日(位)
EveryNWeek詮釋
EndAfterNOccurences詮釋
所有datetimeoffset值都是與DateTime.MIN相關的UTC值,僅用於計算時間值。
我需要能夠返回即將到來的CalendarEvents按其開始時間從今天排序。這需要計算ORDER BY參數。我從來沒有做過定製的t-sql排序任何輸入將不勝感激。
在域邏輯我是做了以下方法來計算SoonestOccurrence每週事件:
DateTime startTime = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(e.FromDate.LocalDateTime, TimeZone);
foreach(CalendarEvent e in events)
{
DateTime endTime = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(e.ToDate.LocalDateTime, TimeZone);
DateTime now = System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, TimeZone);
//clear time component
now = new DateTime(now.Year, now.Month, now.Day);
DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), b.Day.SelectedValue);
int nextWeekDaysAdjustment = (int) day - (int)now.DayOfWeek;
if (nextWeekDaysAdjustment < 0)
{
nextWeekDaysAdjustment+=7;
}
DateTime adjustedStartTime = startTime.AddDays(nextWeekDaysAdjustment);
adjustedStartTime = now.AddTicks(adjustedStartTime.Ticks);
//SoonestOccurrence is a field added in a partical class for CalendarEvent entity
e.SoonestOccurrence = adjustedStartTime;
}
的問題是,我不能做這個排序在內存中,因爲我需要能夠與此頁查詢和頁面加入由NearestAccounts()函數返回的另一個數據集,所以我卡住了。
非常感謝您的幫助。
更新:我需要通過時區ID或時區偏移來調整GetDate()以進行計算,並且所有開始時間都以UTC存儲。
你必須在代碼中做到這一點嗎?你會考慮使用存儲過程嗎? – Dimitri 2011-04-24 23:25:18
@Dimitry準確地說,我正在尋找一個存儲過程解決方案,而不是在代碼中進行。我試圖避免在代碼中做到這一點。 – alexm 2011-04-25 01:22:54
你能提供更多的細節,你正在尋找什麼? – TrevDev 2011-04-26 00:50:27