@@ -16,12 +16,14 @@ WITH tm AS (
1616)
1717
1818-- now calculate time since last UO measurement
19+ -- Use SECOND diffs (like kdigo_uo) so BigQuery and PostgreSQL agree (#1549).
20+ -- BigQuery DATETIME_DIFF(..., MINUTE/HOUR) truncates; SECOND/N keeps fractions.
1921, uo_tm AS (
2022 SELECT tm .stay_id
2123 , CASE
2224 WHEN LAG(charttime) OVER w IS NULL
23- THEN DATETIME_DIFF(charttime, intime_hr, MINUTE)
24- ELSE DATETIME_DIFF(charttime, LAG(charttime) OVER w, MINUTE)
25+ THEN DATETIME_DIFF(charttime, intime_hr, SECOND) / 60 . 0
26+ ELSE DATETIME_DIFF(charttime, LAG(charttime) OVER w, SECOND) / 60 . 0
2527 END AS tm_since_last_uo
2628 , uo .charttime
2729 , uo .urineoutput
@@ -45,24 +47,24 @@ WITH tm AS (
4547 -- to 1 hour of UO, therefore we use '5' and '11' to restrict the
4648 -- period, rather than 6/12 this assumption may overestimate UO rate
4749 -- when documentation is done less than hourly
48- , SUM (CASE WHEN DATETIME_DIFF(io .charttime , iosum .charttime , HOUR) <= 5
50+ , SUM (CASE WHEN DATETIME_DIFF(io .charttime , iosum .charttime , SECOND) / 3600 . 0 <= 5
4951 THEN iosum .urineoutput
5052 ELSE NULL END) AS urineoutput_6hr
5153 , ROUND(CAST(
5254 SUM (
5355 CASE
54- WHEN DATETIME_DIFF(io .charttime , iosum .charttime , HOUR) <= 5
56+ WHEN DATETIME_DIFF(io .charttime , iosum .charttime , SECOND) / 3600 . 0 <= 5
5557 THEN iosum .tm_since_last_uo
5658 ELSE NULL END) / 60 .0 AS NUMERIC
5759 ), 6 ) AS uo_tm_6hr
58- , SUM (CASE WHEN DATETIME_DIFF(io .charttime , iosum .charttime , HOUR) <= 11
60+ , SUM (CASE WHEN DATETIME_DIFF(io .charttime , iosum .charttime , SECOND) / 3600 . 0 <= 11
5961 THEN iosum .urineoutput
6062 ELSE NULL END) AS urineoutput_12hr
6163 , ROUND(CAST(
6264 SUM (
6365 CASE
6466 WHEN
65- DATETIME_DIFF(io .charttime , iosum .charttime , HOUR) <= 11
67+ DATETIME_DIFF(io .charttime , iosum .charttime , SECOND) / 3600 . 0 <= 11
6668 THEN iosum .tm_since_last_uo
6769 ELSE NULL END) / 60 .0 AS NUMERIC
6870 ), 6 ) AS uo_tm_12hr
0 commit comments