Aqui estão meus dados
(Obrigado Jonas) Link do violino: http://sqlfiddle.com/#!18/7ff39/1
Fase de assinatura | ID de Inscrição | Data | Data anterior |
---|---|---|---|
Utilização | 1 | 23/02/2022 | NULO |
NULO | 1 | 24/02/2022 | 23/02/2022 |
NULO | 1 | 25/02/2022 | 23/02/2022 |
NULO | 1 | 26/02/2022 | 23/02/2022 |
NULO | 1 | 27/02/2022 | 23/02/2022 |
Utilização | 1 | 28/02/2022 | NULO |
NULO | 1 | 01/03/2022 | 28/02/2022 |
NULO | 1 | 02/03/2022 | 28/02/2022 |
NULO | 1 | 03/03/2022 | 28/02/2022 |
NULO | 1 | 04/03/2022 | 28/02/2022 |
NULO | 1 | 05/03/2022 | 28/02/2022 |
Utilização | 1 | 06/03/2022 | NULO |
O que preciso retornar é o que está na coluna PreviousDate (além da coluna Date). Considerando cada SubscriptionId, quero encontrar a entrada anterior onde SubscriptionPhase não é NULL e retornar essa data, então uso essa data para outra coisa.
Você pode usar a função window para obter o valor máximo da data:
CASE WHEN SubscriptionPhase IS NULL
- é assim que a data é calculada apenas para linhas nulasMAX(CASE WHEN subscriptionphase IS NOT NULL THEN cast(date AS date) END)
leva a data máxima em que a fase não é nula agrupada pelo ID.ORDER BY cast(date AS date)
garante a classificação correta, ao mesmo tempo querows BETWEEN unbounded preceding AND 1 preceding
garante que sua "janela" esteja nas linhas anteriores.Espero ter entendido seus requisitos corretamente. É assim que posso ver esta consulta sql.
Para retornar a primeira data anterior aos valores nulos em uma lista SQL, você pode usar uma combinação de funções SQL e uma subconsulta. Supondo que você tenha uma tabela com uma lista de datas e alguns valores nulos, aqui está um exemplo de como recuperar a primeira data anterior aos nulos:
Digamos que você tenha uma tabela chamada sua_tabela com colunas data_coluna e valor_coluna. Você deseja encontrar a primeira data anterior aos valores nulos em value_column. Você pode usar uma consulta como esta:
Aqui está o que esta consulta faz:
A subconsulta
(SELECT MIN(date_column) FROM your_table WHERE value_column IS NULL)
encontra o valor mínimo da data entre as linhas onde value_column é nulo. Isso representa a data mais antiga com um valor nulo.A consulta principal então procura o valor máximo da data
(MAX(date_column))
entre as linhas onde value_column é nulo,(WHERE value_column IS NULL)
mas também restringe a data a ser menor que a data mínima encontrada na subconsulta. Isso garante que você obtenha o valor máximo de data antes dos valores nulos.O resultado desta consulta será a primeira data anterior aos valores nulos na value_column.