代码之家  ›  专栏  ›  技术社区  ›  Aditya Mukherji

闰年

  •  1
  • Aditya Mukherji  · 技术社区  · 17 年前


    我想画一个条形图,显示我一年中每天累积的评论数量,希望找到我的系统的重要日期。

    select dayofyear(date),count(*) from reviews group by dayofyear(date);
    

    然而,在注意到返回的是366行而不是365行之后,我意识到我不能用它来制作这张图表,因为每闰年的日指数都会被1抵消,这使我的数据倾斜。

    例如,圣诞节在大多数年份显示为第359天,但在闰年显示为第360天。

    解决这种偏差的最简单方法是什么?

    2 回复  |  直到 17 年前
        1
  •  4
  •   Emil H    17 年前

    我尚未对此进行测试,但您可以执行以下操作:

    SELECT 
            # check if the year is a leap year:
            IF((YEAR(mydate) % 4 = 0 AND YEAR(mydate) % 100 != 0) OR YEAR(mydate) % 400 = 0,
                # if so, check if the date is before or after february 29th. if that is the case, we subtract one from the value
                IF(DAYOFYEAR(mydate) > DAYOFYEAR("2008-02-28"), DAYOFYEAR(mydate) - 1, DAYOFYEAR(mydate)),
                # if the year isn't a leap year, just return the regular dayofyear() value
                DAYOFYEAR(mydate))
        FROM mytbl
    

    更好的方法可能是按月份和月份的日期分组:

    select month(date) m, day(date) d, count(*) from reviews group by m, d;
    

    这样可以避免所有问题,但在应用程序逻辑中处理可能会更复杂。不过,我认为这是一种更好的方式。

        2
  •  1
  •   John    17 年前