как рассчитать разницу между датами в BigQuery - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть таблица с именем «Сотрудники с столбцами»: PersonID, Name, StartDate.Я хочу рассчитать 1) разницу в днях между самым новым и самым старым сотрудником и 2) самый длинный период времени (в днях) без каких-либо новых сотрудников.Я пытался использовать DATEDIFF, однако даты указаны в одном столбце, и я не уверен, какой другой метод мне следует использовать.Любая помощь будет принята с благодарностью

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT 
  SUM(days_before_next_hire) AS days_between_newest_and_oldest_employee,
  MAX(days_before_next_hire) - 1 AS longest_period_without_new_hire
FROM (
  SELECT 
    DATE_DIFF(
      StartDate, 
      LAG(StartDate) OVER(ORDER BY StartDate), 
      DAY
    ) days_before_next_hire
  FROM `project.dataset.your_table`
)   

Вы можете протестировать, поиграть с выше, используя фиктивные данные, как в примере ниже

#standardSQL
WITH `project.dataset.your_table` AS (
  SELECT DATE '2019-01-01' StartDate UNION ALL
  SELECT '2019-01-03' StartDate UNION ALL
  SELECT '2019-01-13' StartDate 
)
SELECT 
  SUM(days_before_next_hire) AS days_between_newest_and_oldest_employee,
  MAX(days_before_next_hire) - 1 AS longest_period_without_new_hire
FROM (
  SELECT 
    DATE_DIFF(
      StartDate, 
      LAG(StartDate) OVER(ORDER BY StartDate), 
      DAY
    ) days_before_next_hire
  FROM `project.dataset.your_table`
)   

с результатом

Row days_between_newest_and_oldest_employee longest_period_without_new_hire  
1   12                                      9       

Обратите внимание на использование -1 при расчете longest_period_without_new_hire - вы действительно можете использовать эту корректировку или нет, зависит от ваших предпочтений подсчета пробелов

0 голосов
/ 07 февраля 2019

1) разница в днях между самой новой и самой старой записью

WITH table AS (
  SELECT DATE(created_at) date, *
  FROM `githubarchive.day.201901*` 
  WHERE _table_suffix<'2'
  AND repo.name = 'google/bazel-common'
  AND type='ForkEvent'
)

SELECT DATE_DIFF(MAX(date), MIN(date),  DAY) max_minus_min
FROM table

2) самый длинный период времени (в днях) без каких-либо новых записей

WITH table AS (
  SELECT DATE(created_at) date, *
  FROM `githubarchive.day.201901*` 
  WHERE _table_suffix<'2'
  AND repo.name = 'google/bazel-common'
  AND type='ForkEvent'
)

SELECT MAX(diff) max_diff
FROM (
  SELECT DATE_DIFF(date, LAG(date) OVER(ORDER BY date), DAY) diff
  FROM table
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...