У меня такой запрос, как ... он не работает, но я получаю синтаксическую ошибку в бите WHERE NOT EXISTS. Однако я не уверен, что это сработало бы так, как я бы этого хотел. В любом случае, я хочу сделать так, чтобы в любой день мог быть только один «В», и это будет первый случай… но я не уверен, сработал ли приведенный ниже код, что все равно будет «B» до самого конца.
UPDATE FoodIntake
SET MealTypeCode = CASE
WHEN substr(DateTime, -8)
BETWEEN (SELECT BreakfastStart FROM Patient WHERE PatientId = :PatientId)
AND (SELECT LunchStart FROM Patient WHERE PatientId = :PatientId)
AND CarbAmount >= 25
AND MealTypeCode IS NULL
WHERE NOT EXISTS (
SELECT * FROM FoodIntake as Old
WHERE MealTypeCode = 'B'
AND substr(Old.DateTime, 10) = substr(FoodIntake.DateTime, 10)
)
THEN 'B'
END
Другой вариант, к которому я не уверен, как подходить, это пометить все, что применимо как B, затем выполнить второй запрос, чтобы найти любое время, когда есть 2 B, в один день и переименовать второй как что-то еще. .
У меня есть запрос, который я пытался для этого, но я знаю, что у него есть некоторые серьезные проблемы ... есть некоторые синтаксические ошибки, которые я не могу полностью понять, но я думаю, что, по крайней мере, они получают то, что я хочу сделать.
UPDATE FoodIntake
SET MealTypeCode = 'U'
WHERE MealTypeCode = 'B'
AND count(SELECT 1 FROM FoodIntake as Old WHERE MealTypeCode ='B' AND substr(Old.DateTime, 10) = substr(FoodIntake.DateTime, 10) ) > 1
AND FoodIntake.DateTime > (SELECT DateTime FROM FoodIntake as Old WHERE MealTypeCode ='B' AND substr(Old.DateTime, 10) = substr(FoodIntake.DateTime, 10) ORDER By DateTime ASC LIMIT = count-1)