У меня есть этот запрос SQL:
SET @start_date = 'a timestamp at x in time';
SET @end_date = 'a timestamp at x + y in time';
SELECT DISTINCT u.user_id
FROM user_plan u
JOIN user_feature uf ON uf.user_plan_id = u.id
WHERE uf.status IN ('PENDING_ACTIVE', 'PENDING_INACTIVE')
AND (
CASE
WHEN @start_date IS NULL AND @end_date IS NULL THEN true
WHEN @end_date IS NOT NULL AND @end_date >= u.created_at AND @start_date IS NULL THEN true
WHEN @start_date IS NOT NULL AND @start_date <= u.created_at AND @end_date IS NULL THEN true
WHEN @start_date IS NOT NULL AND @end_date IS NOT NULL AND u.created_at BETWEEN @start_date AND @end_date THEN true
ELSE false
END
) = true;
start_date
и end_date
поступают в качестве входных параметров.Проблема в том, что они могут быть обнуляемыми, и пока третье и четвертое операторы WHEN
не работают.
Есть ли способ упростить это маленькое безумие?Это то, как далеко я мог бы пойти со своими слабыми навыками SQL.