相关疑难解决方法(0)

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数

Laravel Fluent Query Builder加入子查询

好的经过几个小时的研究并仍在使用DB :: select我不得不问这个问题.因为我即将把我的电脑拉下来;).

我想得到用户的最后一个输入(基于时间戳).我可以使用原始sql执行此操作

SELECT  c.*, p.*
FROM    users c INNER JOIN
(
  SELECT  user_id,
          MAX(created_at) MaxDate
  FROM    `catch-text`
  GROUP BY user_id
 ) MaxDates ON c.id = MaxDates.user_id INNER JOIN
    `catch-text` p ON   MaxDates.user_id = p.user_id
     AND MaxDates.MaxDate = p.created_at
Run Code Online (Sandbox Code Playgroud)

我从另一个帖子此查询这里的计算器.

我已尝试使用Laravel中的流畅查询构建器完成所有操作,但没有成功.

我知道手册说你可以这样做:

DB::table('users')
    ->join('contacts', function($join)
    {
        $join->on('users.id', '=', 'contacts.user_id')->orOn(...);
    })
    ->get();
Run Code Online (Sandbox Code Playgroud)

但这没有多大帮助,因为我不知道如何在那里使用子查询?谁可以点亮我的一天?

laravel laravel-4

65
推荐指数
5
解决办法
7万
查看次数

使用Postgresql进行高效的最新记录查询

我需要做一个大问题,但我只想要最新的记录.

对于单个条目,我可能会做类似的事情

SELECT * FROM table WHERE id = ? ORDER BY date DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

但是我需要为大(数千个条目)数量的记录提取最新记录,但只记录最新条目.

这就是我所拥有的.效率不高.我想知道是否有更好的方法.

SELECT * FROM table a WHERE ID IN $LIST AND date = (SELECT max(date) FROM table b WHERE b.id = a.id);
Run Code Online (Sandbox Code Playgroud)

sql postgresql subquery distinct

49
推荐指数
3
解决办法
6万
查看次数

jpa criteria-api:与subselect一起加入

此查询用于以一对多关系检索最后的记录(请参阅SQL连接:选择一对多关系中 的最后记录)

SELECT  p.*
FROM    customer c 
        INNER JOIN (
                      SELECT customer_id, MAX(date) MaxDate
                      FROM purchase
                      GROUP BY customer_id
                    ) MaxDates ON c.id = MaxDates.customer_id 
        INNER JOIN purchase p ON MaxDates.customer_id = p.customer_id
                    AND MaxDates.MaxDate = p.date;
Run Code Online (Sandbox Code Playgroud)

我的问题:如何使用jpa criteria-api的subselect构建此连接?可能吗?如果没有,可以使用jpql吗?

我的代码到目前为止:

final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<Purchase> query = cb.createQuery(Purchase.class);
final Root<CustomerEntity> root = query.from(Customer.class);

// here should come the join with the sub-select

final Path<Purchase> path = root.join(Customer_.purchases);
query.select(path);

final TypedQuery<Purchase> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

criteria-api jpa-2.0

9
推荐指数
1
解决办法
721
查看次数

如何在django中进行"最大n组"查询?

(这是SQL连接中线程的django版本:选择一对多关系中的最后一条记录)

假设我有一张顾客表和一张购买表.每次购买都属于一个客户.我想获得所有客户的清单以及他们的上次购买.可以在没有原始SQL且没有多个数据库查询的情况下完成吗?

sql django join greatest-n-per-group

8
推荐指数
1
解决办法
2563
查看次数

如何连接表以仅获取多关联的最后一条记录?

我有两个模型:公司和交易(具有多关系)。交易模型具有balance属性。我有一个加入模型的查询:

scope :joined_transactions, (lambda do
  select('transactions.balance as current_balance')
  .joins('LEFT OUTER JOIN transactions ON transactions.company_id = companies.id')
end)
Run Code Online (Sandbox Code Playgroud)

但是,我只想将最后一笔交易包含到该查询中。结果Company.joined_transactions.first.current_balance == Company.first.transactions.last.balance应该是真的。

activerecord ruby-on-rails

3
推荐指数
1
解决办法
4315
查看次数