SQL-запрос, включая расчет времени - PullRequest
0 голосов
/ 27 октября 2009

У меня был хороший поиск, но я не вижу ничего, что приводило бы меня в готовность к этому.

По сути, у меня есть вызов таблицы Diaries, в котором есть такие поля, как StartTime EndTime, мне нужно сделать расчет, который вычисляет разницу в минутах между StartTime и EndTime. затем для каждой строки, которая соответствует этому дню, мне нужно сложить результат в минутах.

Что-то вроде:

Select DiaryID, TotalMinutes 
from (Select (EndTime - StartTime) / 60 AS SubTotalMins 
      from Diary Where ID = Diary.ID) AS FirstSelect 
     (Sum(FirstSelect.SubTotalMins) As TotalMinutes 
Where ID = Diary.ID

Вышесказанное, конечно, мусор, но вы можете видеть, что я пытаюсь решить.

Для каждой строки рассчитайте разницу между Концом и Стартом в минутах. Для всех строк, которые соответствуют сумме предложения where. Вернуть сумму.

Есть идеи?

С уважением

Ответы [ 2 ]

3 голосов
/ 27 октября 2009

Я не уверен, что он указан в стандарте SQL, но в большинстве реализаций SQL есть какая-то функция для определения интервалов. Это действительно сводится к тому, какой вкус SQL вы используете.

Если вы работаете с Oracle / PLSQL:

SELECT NumToDSInterval(enddate- startdate, 'MINUTE') FROM MyTable

В SQL Server / T-SQL:

SELECT DateDiff(n, startdate, enddate) FROM MyTable

В MySQL:

SELECT SubTime(enddate, startdate) FROM MyTable;

Я уверен, что есть один для SQLite и PostGre, а также для любого другого варианта.

2 голосов
/ 27 октября 2009

Если я правильно понимаю (по крайней мере, для SQL Server) ...

SELECT
    SUM(DATEDIFF(minute, StartTime, EndTime)),
    DATEADD(DAY, DATEDIFF(DAY, 0, StartTime), 0) AS [Date]
FROM
    Diary
WHERE
    DiaryID = @ID
GROUP BY
    DiaryID /* in case for all DiaryIDs */,
    DATEADD(DAY, DATEDIFF(DAY, 0, StartTime), 0)

Примечание. При этом компонент времени удаляется из значения datetime. Работает путем расчета количества дней с нуля (= 1 января 1900 года). Это самый эффективный

DATEADD(DAY, DATEDIFF(DAY, 0, StartTime), 0)

DATEDIFF в MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...