代码之家  ›  专栏  ›  技术社区  ›  Christos Karapapas

在MariaDb查询中,给定年、月和周,如何获取月的哪一天、一周的第一天?

  •  0
  • Christos Karapapas  · 技术社区  · 6 年前



    就sql而言,它应该是 WEEK MariaDb function

    Given Year: 2020 Given Month: 1 Given Week: 1 Result: 30
    Given Year: 2020 Given Month: 1 Given Week: 2 Result: 6
    Given Year: 2020 Given Month: 1 Given Week: 3 Result: 13
    Given Year: 2020 Given Month: 1 Given Week: 4 Result: 20
    Given Year: 2020 Given Month: 1 Given Week: 5 Result: 27
    Given Year: 2020 Given Month: 2 Given Week: 5 Result: 27
    Given Year: 2020 Given Month: 2 Given Week: 6 Result: 3
    Given Year: 2020 Given Month: 2 Given Week: 7 Result: 10
    Given Year: 2020 Given Month: 2 Given Week: 8 Result: 17
    Given Year: 2020 Given Month: 2 Given Week: 9 Result: 24
    Given Year: 2020 Given Month: 3 Given Week: 9 Result: 24
    Given Year: 2020 Given Month: 3 Given Week: 10 Result: 2
    Given Year: 2020 Given Month: 3 Given Week: 11 Result: 9
    Given Year: 2020 Given Month: 3 Given Week: 12 Result: 16
    Given Year: 2020 Given Month: 3 Given Week: 13 Result: 23
    Given Year: 2020 Given Month: 3 Given Week: 14 Result: 30
    Given Year: 2020 Given Month: 4 Given Week: 14 Result: 30
    Given Year: 2020 Given Month: 4 Given Week: 15 Result: 6
    Given Year: 2020 Given Month: 4 Given Week: 16 Result: 13
    Given Year: 2020 Given Month: 4 Given Week: 17 Result: 20
    Given Year: 2020 Given Month: 4 Given Week: 18 Result: 27
    Given Year: 2020 Given Month: 5 Given Week: 18 Result: 27
    Given Year: 2020 Given Month: 5 Given Week: 19 Result: 4
    Given Year: 2020 Given Month: 5 Given Week: 20 Result: 11
    Given Year: 2020 Given Month: 5 Given Week: 21 Result: 18
    Given Year: 2020 Given Month: 5 Given Week: 22 Result: 25
    Given Year: 2020 Given Month: 6 Given Week: 23 Result: 1
    Given Year: 2020 Given Month: 6 Given Week: 24 Result: 8
    Given Year: 2020 Given Month: 6 Given Week: 25 Result: 15
    Given Year: 2020 Given Month: 6 Given Week: 26 Result: 22
    Given Year: 2020 Given Month: 6 Given Week: 27 Result: 29
    Given Year: 2020 Given Month: 7 Given Week: 27 Result: 29
    Given Year: 2020 Given Month: 7 Given Week: 28 Result: 6
    Given Year: 2020 Given Month: 7 Given Week: 29 Result: 13
    Given Year: 2020 Given Month: 7 Given Week: 30 Result: 20
    Given Year: 2020 Given Month: 7 Given Week: 31 Result: 27
    Given Year: 2020 Given Month: 8 Given Week: 31 Result: 27
    Given Year: 2020 Given Month: 8 Given Week: 32 Result: 3
    Given Year: 2020 Given Month: 8 Given Week: 33 Result: 10
    Given Year: 2020 Given Month: 8 Given Week: 34 Result: 17
    Given Year: 2020 Given Month: 8 Given Week: 35 Result: 24
    Given Year: 2020 Given Month: 8 Given Week: 36 Result: 31
    Given Year: 2020 Given Month: 9 Given Week: 36 Result: 31
    Given Year: 2020 Given Month: 9 Given Week: 37 Result: 7
    Given Year: 2020 Given Month: 9 Given Week: 38 Result: 14
    Given Year: 2020 Given Month: 9 Given Week: 39 Result: 21
    Given Year: 2020 Given Month: 9 Given Week: 40 Result: 28
    Given Year: 2020 Given Month: 10 Given Week: 40 Result: 28
    Given Year: 2020 Given Month: 10 Given Week: 41 Result: 5
    Given Year: 2020 Given Month: 10 Given Week: 42 Result: 12
    Given Year: 2020 Given Month: 10 Given Week: 43 Result: 19
    Given Year: 2020 Given Month: 10 Given Week: 44 Result: 26
    Given Year: 2020 Given Month: 11 Given Week: 44 Result: 26
    Given Year: 2020 Given Month: 11 Given Week: 45 Result: 2
    Given Year: 2020 Given Month: 11 Given Week: 46 Result: 9
    Given Year: 2020 Given Month: 11 Given Week: 47 Result: 16
    Given Year: 2020 Given Month: 11 Given Week: 48 Result: 23
    Given Year: 2020 Given Month: 11 Given Week: 49 Result: 30
    Given Year: 2020 Given Month: 12 Given Week: 49 Result: 30
    Given Year: 2020 Given Month: 12 Given Week: 50 Result: 7
    Given Year: 2020 Given Month: 12 Given Week: 51 Result: 14
    Given Year: 2020 Given Month: 12 Given Week: 52 Result: 21
    Given Year: 2020 Given Month: 12 Given Week: 53 Result: 28
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   FanoFN    6 年前

    WEEK()

    SELECT mnd AS 'StartDate', 
           mxd AS 'EndDate', 
           ROW_NUMBER() OVER (PARTITION BY  YEAR(mxd) ORDER BY mnd) AS 'WeekNo' 
    FROM
    (SELECT MIN(dt) AS mnd,MAX(dt) AS mxd, nom FROM
     (SELECT dt, num , CEIL(num/7) AS nom FROM
      (SELECT DATE_FORMAT(CONCAT_WS('-',yr,mnt,dy),'%Y-%m-%d') AS dt, 
              ROW_NUMBER() OVER (ORDER BY dt) AS num 
          FROM
          /*Query to generate date in MariaDB*/
          (SELECT LPAD(seq,2,0) AS dy FROM seq_1_to_31) a,
          (SELECT LPAD(seq,2,0) AS mnt FROM seq_1_to_12) b,
          (SELECT seq AS yr FROM seq_2018_to_2023) c
          /*-------------------------*/
    HAVING dt IS NOT NULL ORDER BY dt) V ) W 
    GROUP BY nom) Q;
    

    Demo fiddle here

    我做的 ROW_NUMBER() 首先在子查询中,然后使用该结果除以7(一周7天)和ceiling函数( CEIL() ). 然后执行另一个查询,以按天花板函数的结果分组 MIN() 和 MAX() 在过去的日子里。我又做了一个 函数覆盖查询 PARTITION 按年份 EndDate