Вы можете попробовать это:
SELECT TestId,
Start,
End,
Testtime,
SUM(Testtime) OVER (ORDER BY TestId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
1000 - SUM(Testtime) OVER (ORDER BY TestId ROWS BETWEEN AND UNBOUNDED PRECEDING AND CURRENT ROW)
FROM MyTable
Для SQL Server 2005 вы можете использовать JOIN
для этого:
select t1.testid,
t1.start,
t1.end,
DATEDIFF(hour, t1.Start, t1.End),
sum(DATEDIFF(hour, t2.Start, t2.End)),
1000 - sum(DATEDIFF(hour, t2.Start, t2.End))
from MyTable t1
join MyTable t2 on t1.testid >= t2.testid
group by t1.testid, t1.start, t1.end, t1.Start, t1.End
Посмотрите на тип map
. Это (a -> b) -> [a] -> [b]
. Это не похоже на Ваш тип, который является-> b. Это не карта, это - сгиб.
Функция высшего порядка, на которую Вы хотите посмотреть, foldr
. См. Hoogle.
Что-то как...
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldr1 (+++) $ intersperse ", " $ map f l
where f (da, hia, hfa) = toHtml da
+++ "feira "
+++ show hia
+++ "h - "
+++ show hfa
+++ "h"
Я не знаю, корректно ли это, но это находится в правильном направлении.
Вы хотите свернуться по непустому списку. Этот код мог бы добиться цели:
type HoraAtendimento = (String, Int, Int)
htmlHAtendimento :: [HoraAtendimento] -> Html
htmlHAtendimento [] = toHtml ""
htmlHAtendimento l = foldl1 (+++) $ map convert l
where convert (da,hia,hfa) = toHtml da +++ "feira " +++
show hia +++ "h - " +++ show hfa +++ "h"