Únete en la fecha más reciente y por partición.
Tengo dos tablas,
clicks:
user | date |
---|---|
a | 01/10/2021 |
a | 02/10/2021 |
a | 03/10/2021 |
b | 27/09/2021 |
c | 08/10/2021 |
c | 13/10/2021 |
y segment:
user | date | segment |
---|---|---|
a | 26/09/2021 | 1 |
a | 27/09/2021 | 1 |
a | 03/10/2021 | 2 |
c | 01/10/2021 | 5 |
c | 10/10/2021 | 6 |
Quiero unir segmento a clics para identificar el segmento más reciente por usuario en esa fecha de clic determinada. Entonces, la salida correcta se verá así:
user | date | segment |
---|---|---|
a | 01/10/2021 | 1 |
a | 02/10/2021 | 1 |
a | 03/10/2021 | 2 |
b | 27/09/2021 | |
c | 08/10/2021 | 5 |
c | 13/10/2021 | 6 |
He intentado lo siguiente pero obtengo el error ‘este tipo de patrón de subconsulta correlacionado no es compatible debido a un error interno’.
select *,
(select top 1 segment
from b
where
b.date <= a.date
ORDER BY ROW_NUMBER() OVER(PARTITION BY b.id ORDER BY b.date DESC)) as segment_lookup
from a;
Cualquier ayuda será muy apreciada para encontrar el mejor método. Gracias de antemano.
davy.ai
Una posible solución a este problema es utilizar una subconsulta para identificar primero el segmento más reciente para cada combinación de usuario y fecha en la tabla de segmentos. Luego, podemos unir esta subconsulta con la tabla de clics según el usuario y la fecha para obtener el resultado deseado. Aquí está el código SQL para esta solución:
Explicación:
Ten en cuenta que en el caso en que no haya un segmento coincidente para una combinación de usuario y fecha en la tabla de segmentos, la columna de segmento será NULL en el resultado.