如何通过在spring数据本机查询或存储库中传递userIds列表来获取用户的最大日期时间戳

Posted

技术标签:

【中文标题】如何通过在spring数据本机查询或存储库中传递userIds列表来获取用户的最大日期时间戳【英文标题】:How to get max datetimestamp of a user by passing list of userIds in spring data native query or by repository 【发布时间】:2020-10-01 21:51:25 【问题描述】:

我有一个表transactions,所有交易详情都将存储如下,

+----+-------------+---------------------+---------------------+
| id | merchant_id | amount              | requested_timestamp |
+----+-------------+---------------------+---------------------+
|  1 |           5 | 10                  | 2020-06-02 01:47:47 |
|  2 |           5 | 20                  | 2020-06-02 05:00:14 |
|  3 |      744900 | 30                  | 2020-06-02 05:00:27 |
|  4 |      154427 | 100                 | 2020-06-02 05:01:03 |
|  5 |      504968 | 15                  | 2020-06-02 05:01:26 |
|  6 |       75703 | 20                  | 2020-06-02 05:01:31 |
|  7 |      732228 | 50                  | 2020-06-02 05:01:59 |
|  8 |      506342 | 25                  | 2020-06-02 05:02:17 |
|  9 |      504968 | 40                  | 2020-06-02 05:02:36 |
| 10 |      732228 | 30                  | 2020-06-02 05:02:50 |
+----+-------------+---------------------+---------------------+

我想在一次点击中找到每个商家的最大时间戳,例如将 merchantId 列表 传递给查询。 我尝试使用如下弹簧数据

List<Transactions> findTop1ByMerchantIdInOrderByIdAsc(List<Integer> merchantIds);

但它没有给出最大时间戳。

我尝试如下

@Query("select merchantId,max(requestedTimestamp) from Transactions where merchantId in ?1")
      List<Object[]> getLastTxnsOfAllMerchants(List<Integer> merchantIds);

这给出了例外。

即使使用 本机查询,我的问题也将如下解决

 @Query(nativeQuery=true,value="select merchant_id,max(requested_timestamp) from transactions where merchant_id in ?1")
   List<Object[]> getLastTxnsOfAllMerchants(List<Integer> merchantIds);

这也给出了异常

请帮我解决这个问题,谢谢。

【问题讨论】:

【参考方案1】:

你可以像这样运行查询

SELECT merchant_id, MAX(requested_timestamp) FROM transactions
GROUP BY merchant_id;

或者如果你想要特定的商家

SELECT merchant_id, MAX(requested_timestamp) FROM transactions
WHERE merchant_id IN (1, 2, 3)
GROUP BY merchant_id;

希望这会有所帮助:)

【讨论】:

谢谢,但我不想在此使用 Group by。没有 group by 有可能吗? 则可以跳过group by,对每个商户进行一次查询;从交易中选择商家 ID,MAX(requested_timestamp),其中商家 ID = 1;

以上是关于如何通过在spring数据本机查询或存储库中传递userIds列表来获取用户的最大日期时间戳的主要内容,如果未能解决你的问题,请参考以下文章

我将如何在 Spring 数据存储库中编写 SELECT TOP 25 sql 查询

未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询

java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

Spring @transactional 在存储库中不起作用

如何在本机查询中使用 NVL 或 COALESCE 获取 Spring Data JPA 中的值列表

存储库中的特定查询