原始sql与许多列

时间:2018-05-29 20:55:43

标签: haskell persistent esqueleto

我正在构建一个使用Persistent来提取数据的CRUD应用程序,并执行一些相当复杂的查询,例如使用窗口函数。由于Persistent或Esqueleto都不支持这些,我需要使用原始sql。

一个很好的例子是我想选择值与前一个值没有很大偏差的行,所以在伪sql中条件是WHERE val - lag(val) <= x。我需要在SQL中运行这个选择,而不是拉动所有数据然后在Haskell中进行过滤,因为否则我有办法处理大量数据。

这些查询返回许多列。但是,RawSql实例在具有8个元素的元组中最大化。所以现在我正在编写其他函数from9, to9, from10, to10等等。之后,所有这些都使用类型为(Single a, Single b, ...) -> DesiredType的函数进行转换。虽然使用代码生成可以缩短这种方法,但这种方法简直就是hacky,显然并不像Haskell那样好。这让我很担心,因为我认为我的大多数查询都需要rawSql

您对如何改善这一点有什么建议吗?目前,我的主要想法是取消规范化数据库和重复数据,例如通过将滞后值包含为列,以便我可以使用Esqueleto查询数据。

0 个答案:

没有答案