生成给定表的查询

时间:2012-03-09 14:07:40

标签: sql

我有桌子

        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 

4 个答案:

答案 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