Raw sql со многими столбцами
Я создаю приложение CRUD, которое извлекает данные с помощью Persistent и выполняет ряд довольно сложных запросов, например, с использованием оконных функций. Так как они не поддерживаются ни Persistent, ни Esqueleto, мне нужно использовать raw sql.
Хорошим примером является то, что я хочу выбрать строки, в которых значение не сильно отклоняется от предыдущего значения, поэтому в псевдо-sql условие WHERE val - lag(val) <= x
, Мне нужно запустить этот выбор в SQL, а не извлекать все данные и затем фильтровать их в Haskell, потому что в противном случае у меня был бы способ обработки большого количества данных.
Эти запросы возвращают много столбцов. Тем не менее RawSql
Экземпляр достигает максимума в кортежах с 8 элементами. Так что теперь я пишу дополнительные функции from9, to9, from10, to10
и так далее. И после этого все они конвертируются с использованием функций с типом (Single a, Single b, ...) -> DesiredType
, Хотя это может быть сокращено с помощью генерации кода, этот подход просто хакерский и явно не выглядит как хороший Haskell. Это касается меня, потому что я думаю, что большинство моих запросов потребуют rawSql
,
У вас есть предложения, как это улучшить? В настоящее время моя основная мысль состоит в том, чтобы отменить нормализацию базы данных и дублировать данные, например, включив в качестве столбца значение с задержкой, чтобы я мог запросить данные с помощью Esqueleto.