sql >> Base de Datos >  >> RDS >> PostgreSQL

Rails 5:agrupar registros por campo DateTime en vista de árbol

samples = 100.times.map { |n| { id: n, time: rand(10000).hours.ago } }

data = samples.group_by { |rec| rec[:time].to_date }.group_by { |d, _| d.at_beginning_of_month }.group_by { |m, _| m.at_beginning_of_year }

data.sort_by(&:first).each { |y, recs| puts "-#{y.year}"; recs.sort_by(&:first).each { |m, recs| puts "  -#{m.strftime '%B'}"; recs.sort_by(&:first).each { |d, recs| puts "    -#{d.day}"; recs.each { |rec| puts "      id: #{rec[:id]}" } } } }

da salida:

-2015
  -November
    -13
      id: 32
    -16
      id: 41
    -19
      id: 4
    -20
      id: 39
    -21
      id: 86
  -December
    -4
      id: 68
    -7
      id: 35
    -8
      id: 98
    -22
      id: 10
    -27
      id: 77
-2016
  -January
    -10
      id: 37
    -19
      id: 67
    -31
      id: 85
  -February
    -2
      id: 78
    -13
      id: 89
    -16
      id: 75
    -17
      id: 36
      id: 99
    -22
      id: 28
  -March
    -9
      id: 7
    -11
      id: 66
    -16
      id: 59
    -26
      id: 18
    -29
      id: 8
  -April
    -2
      id: 3
    -8
      id: 69
    -9
      id: 60
    -11
      id: 2
    -12
      id: 33
    -15
      id: 26
    -17
      id: 17
      id: 46
    -19
      id: 13
    -22
      id: 12
    -24
      id: 64
    -27
      id: 50
    -29
      id: 14
    -30
      id: 43
  -May
    -25
      id: 82
    -26
      id: 11
  -June
    -3
      id: 72
    -8
      id: 92
    -14
      id: 25
    -19
      id: 15
    -22
      id: 95
    -23
      id: 56
    -26
      id: 80
    -27
      id: 87
    -29
      id: 19
  -July
    -1
      id: 6
    -2
      id: 81
    -3
      id: 1
    -6
      id: 88
    -7
      id: 65
    -15
      id: 91
    -17
      id: 27
    -20
      id: 38
    -26
      id: 73
  -August
    -1
      id: 0
    -7
      id: 30
    -8
      id: 79
    -15
      id: 9
    -23
      id: 24
    -25
      id: 21
  -September
    -1
      id: 52
    -7
      id: 48
    -9
      id: 34
    -10
      id: 54
      id: 55
    -22
      id: 70
    -27
      id: 23
    -29
      id: 94
  -October
    -2
      id: 22
    -7
      id: 51
    -23
      id: 63
    -24
      id: 57
      id: 62
    -28
      id: 58
      id: 76
    -29
      id: 90
    -31
      id: 49
  -November
    -5
      id: 5
      id: 45
    -6
      id: 61
    -9
      id: 93
    -12
      id: 83
    -13
      id: 71
    -16
      id: 53
    -17
      id: 29
    -21
      id: 44
    -23
      id: 84
  -December
    -9
      id: 31
    -13
      id: 16
    -14
      id: 47
    -16
      id: 42
    -17
      id: 20
      id: 96
    -18
      id: 97
    -19
      id: 74
    -23
      id: 40