Skip to content

Commit ea01960

Browse files
fix: use SECOND-based DATETIME_DIFF in urine_output_rate.
Matches kdigo_uo so BigQuery and PostgreSQL agree on fractional hours (#1549). Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 5bdb9a0 commit ea01960

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

mimic-iv/concepts/measurement/urine_output_rate.sql

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)