@@ -958,8 +958,7 @@ export class BaseQuery {
958958 . map (
959959 d => [
960960 d ,
961- // eslint-disable-next-line @typescript-eslint/no-unused-vars
962- ( dateFrom , dateTo , dateField , dimensionDateFrom , dimensionDateTo ) => `${ dateField } >= ${ dimensionDateFrom } AND ${ dateField } <= ${ dateTo } `
961+ ( _dateFrom , dateTo , dateField , dimensionDateFrom , _dimensionDateTo ) => `${ dateField } >= ${ dimensionDateFrom } AND ${ dateField } <= ${ this . timeStampCast ( dateTo ) } `
963962 ]
964963 ) ;
965964 }
@@ -970,7 +969,7 @@ export class BaseQuery {
970969 . map (
971970 d => [
972971 d ,
973- ( dateFrom , dateTo , dateField , dimensionDateFrom , dimensionDateTo , isFromStartToEnd ) => `${ dateField } >= ${ this . timeGroupedColumn ( granularity , dateFrom ) } AND ${ dateField } <= ${ dateTo } `
972+ ( dateFrom , dateTo , dateField , _dimensionDateFrom , _dimensionDateTo , _isFromStartToEnd ) => `${ dateField } >= ${ this . timeGroupedColumn ( granularity , dateFrom ) } AND ${ dateField } <= ${ this . timeStampCast ( dateTo ) } `
974973 ]
975974 ) ;
976975 }
@@ -985,13 +984,13 @@ export class BaseQuery {
985984 const conditions = [ ] ;
986985 if ( trailingInterval !== 'unbounded' ) {
987986 const startDate = isFromStartToEnd || offset === 'start' ? dateFrom : dateTo ;
988- const trailingStart = trailingInterval ? this . subtractInterval ( startDate , trailingInterval ) : startDate ;
987+ const trailingStart = trailingInterval ? this . subtractInterval ( startDate , trailingInterval ) : this . timeStampCast ( startDate ) ;
989988 const sign = offset === 'start' ? '>=' : '>' ;
990989 conditions . push ( `${ dateField } ${ sign } ${ trailingStart } ` ) ;
991990 }
992991 if ( leadingInterval !== 'unbounded' ) {
993992 const endDate = isFromStartToEnd || offset === 'end' ? dateTo : dateFrom ;
994- const leadingEnd = leadingInterval ? this . addInterval ( endDate , leadingInterval ) : endDate ;
993+ const leadingEnd = leadingInterval ? this . addInterval ( endDate , leadingInterval ) : this . timeStampCast ( endDate ) ;
995994 const sign = offset === 'end' ? '<=' : '<' ;
996995 conditions . push ( `${ dateField } ${ sign } ${ leadingEnd } ` ) ;
997996 }
@@ -1792,8 +1791,11 @@ export class BaseQuery {
17921791 // but some dialects (like BigQuery) require strict date types and can not automatically convert
17931792 // between date and timestamp for comparisons, at the same time, time dimensions are expected to be
17941793 // timestamps, so we need to align types for join conditions/comparisons.
1795- this . timeStampCast ( `${ d . dateSeriesAliasName ( ) } .${ this . escapeColumnName ( 'date_from' ) } ` ) ,
1796- this . timeStampCast ( `${ d . dateSeriesAliasName ( ) } .${ this . escapeColumnName ( 'date_to' ) } ` ) ,
1794+ // But we can't do it here, as it would break interval maths used in some types of
1795+ // rolling window join conditions in some dialects (like Redshift), so we need to
1796+ // do casts granularly in rolling window join conditions functions.
1797+ `${ d . dateSeriesAliasName ( ) } .${ this . escapeColumnName ( 'date_from' ) } ` ,
1798+ `${ d . dateSeriesAliasName ( ) } .${ this . escapeColumnName ( 'date_to' ) } ` ,
17971799 `${ baseQueryAlias } .${ d . aliasName ( ) } ` ,
17981800 `'${ d . dateFromFormatted ( ) } '` ,
17991801 `'${ d . dateToFormatted ( ) } '`
0 commit comments