Ниже для BigQuery Standard SQL
#standardSQL
SELECT
IFNULL(OnSite.worksite_id, Documents.worksite_id) AS `Worksite`,
IFNULL(OnSite.timestamp, DATE(Documents.timestamp)) AS `DATE`,
COUNT(Documents.worksite_id) AS `Users_on_Site`,
COUNT(DISTINCT OnSite.uid) AS `Completed`
FROM `project.dataset.OnSite` OnSite
LEFT JOIN `project.dataset.Documents` Documents
ON OnSite.worksite_id = Documents.worksite_id
AND OnSite.timestamp = DATE(Documents.timestamp)
GROUP BY `DATE`, `Worksite`
, если применить к выборке данных из вашего вопроса
WITH `project.dataset.OnSite` AS (
SELECT "u12345" uid, "worksite_1" worksite_id, DATE '2019-01-01' `TIMESTAMP` UNION ALL
SELECT "u12345", "worksite_1", '2019-01-02' UNION ALL
SELECT "u12345", "worksite_1", '2019-01-03' UNION ALL
SELECT "u12345", "worksite_1", '2019-01-04' UNION ALL
SELECT "u12345", "worksite_1", '2019-01-05' UNION ALL
SELECT "u12345", "worksite_1", '2019-01-06' UNION ALL
SELECT "u1", "worksite_1", '2019-01-01' UNION ALL
SELECT "u1", "worksite_1", '2019-01-02' UNION ALL
SELECT "u1", "worksite_1", '2019-01-05' UNION ALL
SELECT "u1", "worksite_1", '2019-01-06'
), `project.dataset.Documents` AS (
SELECT "1" document_id, "u12345" uid, "worksite_1" worksite_id, 'work_permit' type, TIMESTAMP '2019-01-01 00:00:00' `TIMESTAMP` UNION ALL
SELECT "2", "u12345", "worksite_2", 'job', '2019-01-02 00:00:00' UNION ALL
SELECT "3", "u12345", "worksite_1", 'work_permit', '2019-01-03 00:00:00' UNION ALL
SELECT "4", "u12345", "worksite_2", 'job', '2019-01-04 00:00:00' UNION ALL
SELECT "5", "u12345", "worksite_1", 'work_permit', '2019-01-05 00:00:00' UNION ALL
SELECT "6", "u12345", "worksite_2", 'job', '2019-01-06 00:00:00' UNION ALL
SELECT "7", "u12345", "worksite_1", 'work_permit', '2019-01-07 00:00:00' UNION ALL
SELECT "8", "u12345", "worksite_2", 'work_permit', '2019-01-09 00:00:00' UNION ALL
SELECT "9", "u12345", "worksite_1", 'job', '2019-01-09 00:00:00' UNION ALL
SELECT "10", "u12345", "worksite_2", 'work_permit', '2019-01-09 00:00:00' UNION ALL
SELECT "11", "u12345", "worksite_1", 'work_permit', '2019-01-09 00:00:00' UNION ALL
SELECT "12", "u12345", "worksite_2", 'work_permit', '2019-01-09 00:00:00' UNION ALL
SELECT "13", "u12345", "worksite_1", 'job', '2019-01-09 00:00:00' UNION ALL
SELECT "14", "u12345", "worksite_2", 'work_permit', '2019-01-09 00:00:00' UNION ALL
SELECT "15", "u12345", "worksite_1", 'work_permit', '2019-01-09 00:00:00'
)
результат будет ожидаемым
Row Worksite Date Users_on_Site Completed
1 worksite_1 2019-01-01 2 2
2 worksite_1 2019-01-02 0 2
3 worksite_1 2019-01-03 1 1
4 worksite_1 2019-01-04 0 1
5 worksite_1 2019-01-05 2 2
6 worksite_1 2019-01-06 0 2
Со сборкой Win7 не стало Добавлять-модуля. Новым cmdlet является Модуль Импорта. Самый легкий способ создать модуль, переименовывают файл PS1 в файл PSM1. Оттуда можно сделать все виды вещей включая декларацию модуля.
Вот определенная информация. http://huddledmasses.org/powershell-modules/
Давайте надеяться, что предстоящий CTP3 имеет некоторую полезную документацию о модулях.
Модули, надо надеяться, решат несколько проблем. Прямо сейчас мы можем использовать определение источника точки для получения функций, переменных и сценариев в глобальную область видимости сессии PowerShell.
Проблема состоит в том, что это может загрязнить Вашу сессию со всеми видами глобальных переменных и функций помощника, которые конечный пользователь не может хотеть/нуждаться непосредственно.
Модули позволят Вам как автор создавать сценарии и только делать определенные функции/переменные avaiable конечному пользователю модуля.
Они также по существу заменяют понятие PSSnapin. Можно использовать Добавлять-модуль Some.dll для добавления блока, который имеет cmdlets в нем.
То, что действительно прохладно, - то, что называют Декларацией Модуля. Это - хеш-таблица, которая в основном указывает все виды dependcies, а также автора, имени, Идентификатора GUID и номера версии. Когда пользовательские нагрузки модуль, который имеет декларацию модуля, она проверит все зависимости и запустит любые скрипты, автор модуля считает необходимым.
Должна быть некоторая достойная документация относительно них, когда CTP3 поставлется.
Надежда, которая помогает немного.
Andy
Windows PowerShell v2.0: TFM (sapienpress.com) имеет информацию и образцы в одной из глав. Это доступно как электронная книга, которая обновляется, поскольку новые CTPs выпущены. Я также вел блог о них на ConcentratedTech.com, и было обсуждение их по PowerShellCommunity.org на форумах.
Я не эксперт по Powershell, но вот что я только что выяснил, используя PowerShell 2.0 RTM.
Предположим, вы хотите создать модуль под названием MyModule :
Export-ModuleMember -Function * -Alias *
экспортирует все функции и псевдонимы Import-Module MyModule
По умолчанию Powershell настроен так, чтобы не запускать какие-либо сценарии из файлов, поэтому вам необходимо изменить параметры безопасности. Set-ExecutionPolicy Unrestricted
поможет вам начать работу, если вас не беспокоят сценарии, которые необходимо подписать.