Prisma ORM 如何通过 GREATEST() 订购

问题描述 投票:0回答:1

我有一个包含两列

updated_at
children_updated_at
的数据库表,我想首先基于SQL函数
GREATEST(updated_at, children_updated_at)
显示最新修改的记录。

我想要生成的 SQL 查询是:

select * from Account ORDER BY GREATEST(updated_at, children_updated_at);

输出应首先以

updated_at
children_updated_at
中的最高值排序。

像这样的输入表:

名字 更新于 children_updated_at
用户1 2024-05-07 10:00:00.000 2024-05-07 13:00:00.000
用户2 2024-05-07 11:00:00.000 2024-05-07 09:00:00.000
用户3 2024-05-07 12:00:00.000 2024-05-07 10:00:00.000

应该生成如下输出:

[
  { "name": "User 1",
    "updated_at": "2024-05-07 10:00:00.000",
    "children_updated_at": "2024-05-07 13:00:00.000"
  },
  { "name": "User 3",
    "updated_at": "2024-05-07 12:00:00.000",
    "children_updated_at": "2024-05-07 10:00:00.000"
  },
  { "name": "User 2",
    "updated_at": "2024-05-07 11:00:00.000",
    "children_updated_at": "2024-05-07 09:00:00.000"
  }
]

我在 Prisma 文档中找不到任何有关使用

GREATEST()
或其他组合列的 SQL 函数的信息。

实际的查询要复杂得多,因此原始 sql 查询对我来说不起作用。
有没有办法使用 Prisma ORM 来实现这个需求?

mysql sql-order-by prisma
1个回答
0
投票

MySQL查询:

select *
from inputTable
order by 
   GREATEST(
        COALESCE(updated_at, 0), 
        COALESCE(children_updated_at, 0)
   )

查看结果:db<>fiddle

输出:

enter image description here

GREATEST(dt1, dt2)
会起作用的。但如果任何日期为空,那么它将不起作用。

所以,更好地使用

GREATEST(COALESCE(dt1, 0), COALESCE(dt2, 0))

© www.soinside.com 2019 - 2024. All rights reserved.