java - 如何查询按计数分组的对象列表(按最后一天的提及频率)

标签 java sql spring-boot hibernate jpa

原理就像 StackOverFlow 一样 - 每个问题都有标签。我需要按最后一天的提及频率显示这些标签。

public List<TagDto> getAllTagsByCount() {
    List<TagDto> tagDtos = new ArrayList<>();
    try {
        tagDtos = entityManager.createQuery("SELECT t.id, t.name FROM Tag t") // have no idea how to write such query
                .unwrap(Query.class)
                .setResultTransformer(new ResultTransformer() {
                    @Override
                    public Object transformTuple(Object[] objects, String[] strings) {
                        return TagDto.builder()
                                .id((Long) objects[0])
                                .name((String) objects[1])
                                .build();
                    }

                    @Override
                    public List transformList(List list) {
                        return list;
                    }
                })
                .getResultList();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return tagDtos;
}

如果您需要一些额外的代码部分,请告诉我

最佳答案

您正在寻找的内容可能类似于以下内容

    List<Tuple> tuple = entityManager.createQuery("SELECT t.name, COUNT(*) FROM Tag t WHERE t.date BETWEEN :yesterday AND :tomorrow GROUP BY t.name")
        .setParameter("yesterday", LocalDateTime.now().minus(1, ChronoUnit.DAYS).with(LocalTime.of(0, 0, 0))
        .setParameter("tomorrow", LocalDateTime.now().plus(1, ChronoUnit.DAYS).with(LocalTime.of(0, 0, 0))
        .getResultList();

不过你似乎没有基本的 SQL 知识,所以我建议你先尝试学习 SQL。

关于java - 如何查询按计数分组的对象列表(按最后一天的提及频率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372358/

相关文章:

java - 为什么列表元素不交换?

java - 等待上一个函数执行完毕

sql - 自动为所有 SQL Server 作业创建脚本

php - 奇怪的 MySQL 语法错误 : In a code which used to work

java - 如何使用 Java SDK 在 DynamoDB 中建模多对多关系

java - 数据库插入没有发生

php - 特定字符是否可以使用 LOAD DATA LOCAL INFILE 停止数据插入?

spring - 使用 Spring-Boot 应用程序的 application-{profile}.properties 的父属性

Spring ExceptionalHandler 的 Java 测试

java - 列表过滤器<List<String>>