Добрый день. есть вот такой пример запроса.
![]()
идея в том чтоб взять записи которые созданы после определенного времени.
в результате он генерирует следующий SQL запрос который не совсем подходит, так как он возвращает запись которая была возвращена в прошлой выборке (я вытаскиваю данные по 10 записей).
![]()
пример запроса, который создается
SELECT
"Contact"."Name" "Name",
"Contact"."QSoftGSTime" "QSoftGSTime",
"Contact"."ContactPhoto" "ContactPhoto",
"Contact"."Phone" "Phone",
"Contact"."CreatedOn" "CreatedOn",
COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name"
FROM
"public"."Contact" "Contact"
LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId")
LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id"
AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}')
WHERE
"Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3')
ORDER BY
"CreatedOn" ASC NULLS FIRST
LIMIT 10получается что при выборке данных проверяется только первые три цифры из милисекунд ('2023-02-06 21:21:02.149', 'YYYY-MM-DD HH24:MI:SS.FF3'). в итоге я получаю два раза одну и ту же запись. решение это указывать все 6 цифр милисекунд следующий запрос выполняется корректно и не приводит к дублированию данных
SELECT
"Contact"."Name" "Name",
"Contact"."QSoftGSTime" "QSoftGSTime",
"Contact"."ContactPhoto" "ContactPhoto",
"Contact"."Phone" "Phone",
"Contact"."CreatedOn" "CreatedOn",
COALESCE("SysCityLcz"."Name", "City"."Name") "City.Name"
FROM
"public"."Contact" "Contact"
LEFT OUTER JOIN "public"."City" "City" ON ("City"."Id" = "Contact"."CityId")
LEFT OUTER JOIN "public"."SysCityLcz" "SysCityLcz" ON ("SysCityLcz"."RecordId" = "City"."Id"
AND "SysCityLcz"."SysCultureId" = '{F0EA9715-8757-474C-AEE9-743D672E48C9}')
WHERE
"Contact"."CreatedOn" > TO_TIMESTAMP('2023-02-06 21:21:02.149528', 'YYYY-MM-DD HH24:MI:SS.FF6')
ORDER BY
"CreatedOn" ASC NULLS FIRST
LIMIT 10я не нашел способа управлять количеством цифр милисекунд в запросе.
можете подсказать как это правильно сделать?
пока что как хак я решил генерировать запрос с помощью EntitySchemaQuery, делать esqResult.GetSelectQuery(_connection), с него получать текст запроса и в нем уже подменять значения с помощью регулярки. но это выглядит костылем, который не хотелось бы оставлять.
спасибо!
Нравится
Добрый день,
К сожалению пока возможности управления этим количеством символов нет. Поэтому нужно подумать над альтернативными решениями обхода проблемы - возможно увеличить лимит с 10 записей на большее количество, чтобминимизировать риск ошибки, можно попробовать еще модифицировать фильтр. Возможно поможет добавление сортировки по Id - это сделает порядок записей всегда одинаковым, или просто использовать встроенную постраничность.