You are doing it all wrong! :)

model.json:

{
  "version": "1.0",
  "defaultSchema": "os",
  "schemas": [
    {
      "name": "os",
      "tables": [
        {
          "name": "git_commits",
          "type": "view",
          "sql": "select * from table(\"git_commits\"(true))"
        }
      ],
      "functions": [
        {
          "name": "git_commits",
          "className": "org.apache.calcite.adapter.os.GitCommitsTableFunction"
        }
      ]
    }
  ]
}


$ ./sqlline

sqlline> !connect jdbc:calcite:model=model.json;lex=java admin admin

select quarter_date
     , sum(is_committer) committers
     , sum(1 - is_committer) non_committers
     , count(*) total
  from (
    select cast(floor(commit_timestamp to quarter) as date) quarter_date
         , case when c.author_timestamp > phonebook.first_commit then
1 else 0 end is_committer
      from git_commits c
      left join (
               select committer
                    , min(commit_timestamp) first_commit
                 from git_commits
                group by committer
           ) phonebook
        on (c.author = phonebook.committer)
  )
 group by quarter_date
 order by quarter_date;


+--------------+------------+----------------+-----------------+
| quarter_date | committers | non_committers |      total      |
+--------------+------------+----------------+-----------------+
| 2012-04-01   | 60         | 5              | 65              |
| 2012-07-01   | 64         | 0              | 64              |
| 2012-10-01   | 50         | 1              | 51              |
| 2013-01-01   | 100        | 1              | 101             |
| 2013-04-01   | 136        | 0              | 136             |
| 2013-07-01   | 129        | 3              | 132             |
| 2013-10-01   | 127        | 6              | 133             |
| 2014-01-01   | 219        | 26             | 245             |
| 2014-04-01   | 167        | 16             | 183             |
| 2014-07-01   | 124        | 18             | 142             |
| 2014-10-01   | 86         | 23             | 109             |
| 2015-01-01   | 89         | 25             | 114             |
| 2015-04-01   | 92         | 30             | 122             |
| 2015-07-01   | 78         | 34             | 112             |
| 2015-10-01   | 80         | 42             | 122             |
| 2016-01-01   | 133        | 23             | 156             |
| 2016-04-01   | 98         | 27             | 125             |
| 2016-07-01   | 51         | 27             | 78              |
| 2016-10-01   | 71         | 35             | 106             |
| 2017-01-01   | 90         | 48             | 138             |
| 2017-04-01   | 65         | 52             | 117             |
| 2017-07-01   | 39         | 36             | 75              |
| 2017-10-01   | 44         | 46             | 90              |
| 2018-01-01   | 43         | 43             | 86              |
| 2018-04-01   | 33         | 67             | 100             |
| 2018-07-01   | 115        | 49             | 164             |
| 2018-10-01   | 47         | 44             | 91              |
| 2019-01-01   | 80         | 68             | 148             |
| 2019-04-01   | 69         | 80             | 149             |
| 2019-07-01   | 70         | 93             | 163             |
| 2019-10-01   | 122        | 101            | 223             |
| 2020-01-01   | 129        | 51             | 180             |
| 2020-04-01   | 106        | 69             | 175             |
| 2020-07-01   | 126        | 42             | 168             |
| 2020-10-01   | 75         | 2              | 77              |
+--------------+------------+----------------+-----------------+
35 rows selected (0.265 seconds)


Vladimir

Reply via email to