Reputation: 33
SELECT DISTINCT
P.NAME, L.ID, L.FROM, L.END, L.SALARY, L.NOTE,
CASE
WHEN (MAX(A.END) IS NULL OR MAX(A.END) >= current date )
THEN 'JES'
ELSE 'NO'
END AS "Have One "
FROM
SALARY L
INNER JOIN
CONTACT A ON A.ID = L.ID
INNER JOIN
Pep P ON P.ID = L.ID
WHERE
L.SALARY = '8000'
AND L.END >= CURRENT DATE
GROUP BY
P.NAME, L.ID, L.FROM, L.END, L.SALARY, L.NOTE
what i want to add new column that contain result : how many active record by person . i consider record is active when the following condition is ok
L.END >= FIRST_DAY(CURRENT DATE) AND L.FROM <= LAST_DAY(CURRENT DATE)
example på result:
| name | ID | FROM | END | SALARY | NOTE | HAVE ONE | ACTIVE | KLAR | 678 |2021-01-01 |2021-09-31| 8000 | GOD | YES | 1 | KLAR | 678 |2021-10-01 |2021-12-31| 8000 | GOD | YES | 1 | TINA | 676 |2021-01-01 |2021-09-31| 8000 | GOD | YES | 2 | TINA | 676 |2021-06-01 |2021-12-31| 8000 | GOD | YES | 2
Upvotes: 0
Views: 134
Reputation: 32579
It looks like you can just use conditional aggregation with your existing logic, implement your new column like so:
...,
SUM(
SUM(
CASE WHEN L.END >= FIRST_DAY(CURRENT DATE)
AND L.FROM <= LAST_DAY(CURRENT DATE)
THEN 1 ELSE 0 END
)
) OVER (PARTITION BY ID) AS ACTIVE
Upvotes: 4