随机长度列表中的第一个和最后一个数字


First and last number from random length lists

好吧,所以我想做一件棘手的事情。我有一个PHP的日历计划器,mySQL,人们在其中计划他们的假期。

在数据库中,它看起来是这样的:每个人都使用日期(z)(仅限天数)对假期列表进行了排序。

因此,在dbase中,它可以是这样的:

4
5
6
7
22
23
24
25
52

等等。

输出应该给出一个所有假期的列表和工作日的数量,总结在最后。所以类似的东西:

4-7 (4)
22-25 (2)
52 (1)
------
Sum (7)

我有计算工作日的工作功能,所以这取决于我,但有人知道如何从每个时段中获得第一天和最后一天吗?

您可以使用此查询来获取结果的第一部分。

select CONCAT(min(day), '-',  max(day), ' (', max(day)-min(day)+1, ')') as result 
FROM 
(
select day, @curRow := @curRow + 1 as row_number, day - @curRow FROM days d JOIN (SELECT @curRow := 0) r
) A group by day - row_number;

此查询将提供总额:

SELECT CONCAT('Sum (', CAST(SUM(results) as CHAR(20)), ')') as results FROM 
(
  select max(day) - min(day) + 1 as results FROM 
  (
  select day, @curRow := @curRow + 1 as row_number, day - @curRow FROM days d JOIN (SELECT @curRow := 0) r
  ) A group by day - row_number
) B

请参阅这篇文章,了解它是如何工作的。