我有桌子
id year month day
1 2012 1 1
2 2012 1 2
3 2012 1 3
4 2012 1 4
5 2012 1 5
6 2012 1 7
7 2012 1 8
8 2012 1 9
9 2012 1 10
10 2012 1 11
从上表我想在id的计数到达时生成以下输出 多个5
day_start day_end
1 5
5 11
答案 0 :(得分:2)
我不确定Day_start来自哪里。这可能会让您了解如何解决这个问题。
SELECT id as day_start, day as day_end
FROM MyTable
WHERE mod(id, 5) = 0
答案 1 :(得分:1)
假设MySQL,请尝试:
select min(coalesce(p.day,c.day)) day_start, max(c.day) day_end
from my_table c
left join my_table p on p.id = c.id-1
group by floor((c.id-1)/5)
答案 2 :(得分:1)
这将在SQL Server中运行。如果删除行并且不再完成id序列,则使用row_number
而不是id
字段值可以防止错误。
注意:我的答案是基于你说“id 的数量”达到5,而不是“id的值“。对我来说意味着“每5条记录,无论id值是什么”。如果情况并非如此,那么请留下评论,我将删除此答案,因为Mark会正常工作。
select case when rownumber = 5 then 1 else rownumber - 5 end as day_start, day_end
from
(
select row_number() over (order by id) as RowNumber, [day] as day_end
from table1
) t
where rownumber % 5 = 0
答案 3 :(得分:1)
SELECT CASE id WHEN 5 THEN 1 ELSE id - 5 END AS day_start, day AS day_end
FROM [TableName]
WHERE id % 5 = 0