相关疑难解决方法(0)

MAX函数在where子句mysql中

我如何在mysql查询的where子句中使用max()函数,我正在尝试:

 select firstName,Lastname,MAX(id) as max where id=max;
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误:

Unknown column 'max' in 'where clause'
Run Code Online (Sandbox Code Playgroud)

任何帮助?提前致谢.

mysql sql max greatest-n-per-group

31
推荐指数
5
解决办法
12万
查看次数

如何使用聚合函数获取MySQL查询中分组记录的第一个和最后一个记录?

我正在尝试获取"分组"记录的第一个和最后一个记录.
更确切地说,我正在做这样的查询

SELECT MIN(low_price), MAX(high_price), open, close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)
Run Code Online (Sandbox Code Playgroud)

但我想获得该组的第一个和最后一个记录.它可以通过做大量的请求完成,但我有一个非常大的表.

是否有一个(如果可能的话处理时间很短)用MySQL做这个的方法?

mysql aggregate-functions

29
推荐指数
1
解决办法
7万
查看次数

如何从ActiveRecord中获取每组的最新记录?

在我的Ruby on Rails应用程序中,我有一个像这样的数据库结构:

Project.create(:group => "1", :date => "2014-01-01")
Project.create(:group => "1", :date => "2014-01-02")
Project.create(:group => "1", :date => "2014-01-03")

Project.create(:group => "2", :date => "2014-01-01")
Project.create(:group => "2", :date => "2014-01-02")
Project.create(:group => "2", :date => "2014-01-03")

# and so forth...
Run Code Online (Sandbox Code Playgroud)

如何group使用ActiveRecord 获取每个记录的最新记录?

解决方案可能很简单,但我无法理解这一点.

谢谢你的帮助.

ruby activerecord ruby-on-rails

27
推荐指数
4
解决办法
2万
查看次数

SQL:查找每组的最大记录数

可能重复:
检索每个组中的最后一条记录

我有一个表,它有三个字段和数据.

Name  , Top , Total
cat   ,   1 ,    10
dog   ,   2 ,     7
cat   ,   3 ,    20
horse ,   4 ,     4
cat   ,   5 ,    10
dog   ,   6 ,     9

我想选择Total每个值最高的记录Name,所以我的结果应该是这样的:

Name  , Top , Total
cat   ,   3 ,    20
horse ,   4 ,     4
Dog   ,   6 ,     9

按名称顺序尝试了小组,但是按照结果给了小组的最高记录.有人可以指导我吗?

mysql sql greatest-n-per-group

23
推荐指数
2
解决办法
6万
查看次数

获取Laravel中每个用户的最新消息(行)

TL; DR:需要每个发件人的最新消息.

在我的Laravel应用程序中,我有两个表:

用户:

  • ID
  • 名称

消息:

  • ID
  • 发件人ID
  • recipient_id
  • 身体
  • created_at

当然还有模特.

用户模型:

public function messages() {
    return $this->hasMany('App\Message', 'recipient_id');
}
Run Code Online (Sandbox Code Playgroud)

消息模型:

public function sender() {
    return $this->belongsTo('App\User', 'sender_id');
}

public function recipient() {
    return $this->belongsTo('App\User', 'recipient_id');
}
Run Code Online (Sandbox Code Playgroud)

当用户打开他的收件箱时,他应该看到来自任何其他用户的最新消息列表.

所以,如果有消息:

id sender_id recipient_id body created_at
1, 2,        1,           hi,  2016-06-20 12:00:00
2, 2,        1,           hi,  2016-06-21 12:00:00
3, 3,        1,           hi,  2016-06-20 12:00:00
4, 3,        1,           hi,  2016-06-21 12:00:00
Run Code Online (Sandbox Code Playgroud)

然后,id为1(recipient_id)的用户应该只看到ID为2和4的消息.

这是用户模型中的当前解决方案:

return Message::whereIn('id', function($query) {
                $query->selectRaw('max(`id`)')
                ->from('messages')
                ->where('recipient_id', '=', …
Run Code Online (Sandbox Code Playgroud)

php laravel

16
推荐指数
2
解决办法
2341
查看次数

在MySQL中返回每个'group by'的'last'行

有更有效的方法来做以下事情吗?

select * 
    from foo as a
    where a.id = (select max(id) from foo where uid = a.uid group by uid)
    group by uid;
)
Run Code Online (Sandbox Code Playgroud)

这个答案看起来很相似,但这个答案是最好的方法 - 如何为MySQL中的每个组选择第一行?

谢谢,

克里斯.

PS表格如下:

CREATE TABLE foo (
    id INT(10) NOT NULL AUTO_INCREMENT,
    uid INT(10) NOT NULL,
    value VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `uid` (`uid`)
)
Run Code Online (Sandbox Code Playgroud)

数据:

id, uid, value
 1,   1, hello
 2,   2, cheese
 3,   2, pickle
 4,   1, world
Run Code Online (Sandbox Code Playgroud)

结果:

id, uid, value
 3,   2, pickle
 4,   1, …
Run Code Online (Sandbox Code Playgroud)

mysql group-by

15
推荐指数
2
解决办法
5万
查看次数

在mysql中使用group by仅选择最后一个值

我有一张表格,其中包含有关参加某些活动的数据.每次用户发送新的出勤时,我都会在表中列出出勤的数据,信息如下:

mysql> SELECT id_branch_channel, id_member, attendance, timestamp, id_member FROM view_event_attendance WHERE id_event = 782;
+-------------------+-----------+------------+------------+-----------+
| id_branch_channel | id_member | attendance | timestamp  | id_member |
+-------------------+-----------+------------+------------+-----------+
|              1326 |    131327 |        459 | 1363208604 |    131327 |
|              1326 |    131327 |        123 | 1363208504 |    131327 |
|              1326 |    131327 |          1 | 1363208459 |    131327 |
|              1326 |     93086 |          0 |       NULL |     93086 |
|              1326 |     93087 |          0 |       NULL | …
Run Code Online (Sandbox Code Playgroud)

mysql group-by

14
推荐指数
1
解决办法
2万
查看次数

从每个对话中获取最后一条消息

我之前曾经问过类似的问题,但是没有一个问题具有相同的条件,他们的答案对于这种情况不起作用.

包含消息的表如下所示:

id | owner_id | recipient_id | content      | created
 1 |        1 |            2 | Hello        | 2015-12-08 20:00
 2 |        2 |            1 | Hey          | 2015-12-08 20:10
 3 |        3 |            1 | You there?   | 2015-12-08 21:00
 4 |        1 |            3 | Yes          | 2015-12-08 21:15
 5 |        4 |            1 | Hey buddy    | 2015-12-08 22:00
Run Code Online (Sandbox Code Playgroud)

让我们说我查询用户ID 1的对话,预期结果是:

id | owner_id | recipient_id | content      | created
 5 |        4 |            1 | …
Run Code Online (Sandbox Code Playgroud)

mysql sql database relational-database

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

如何使用Eloquent订购分组结果?

我一直试图解决这个问题已经有一段时间了,似乎无法让它发挥作用.我有一张看起来与此类似的表.

表:问题

id  yearly_issue    year    stock   created_at      updated_at      magazine_id 
1   10              2000    1       [timestamp]     [timestamp]     3
2   12              1994    6       [timestamp]     [timestamp]     10
3   36              2007    10      [timestamp]     [timestamp]     102
4   6               2002    7       [timestamp]     [timestamp]     7
5   6               2002    2       [timestamp]     [timestamp]     5
6   12              2003    9       [timestamp]     [timestamp]     10
7   11              2003    12      [timestamp]     [timestamp]     10
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要对它进行排序(简单!)但是,我只想获得每个杂志中的一个(专栏magazine_id).

我现在的Eloquent查询是:

$issues = Issue::where('stock', ($all ? '>=' : '>'), 0)
  ->orderBy('year', 'desc')
  ->orderBy('yearly_issue', 'desc')
  ->take($perpage)
  ->get();
Run Code Online (Sandbox Code Playgroud)

我认为添加groupBy('magazine_id')会有所帮助,但似乎它只是部分帮助我.结果的顺序不正确.所以,我的问题是 - 有什么简单的方法吗? …

laravel eloquent

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

我的子查询为执行时间增加了20秒.我怎样才能加快速度?

我有一个已发送短信的表格,该短信必须加入到送达回执表中才能获得最新的短信状态.

有997,148条发送短信.

我正在运行此查询:

SELECT
    m.id,
    m.user_id,
    m.api_key,
    m.to,
    m.message,
    m.sender_id,
    m.route,
    m.submission_reference,
    m.unique_submission_reference,
    m.reason_code,
    m.timestamp,
    d.id AS dlrid,
    d.dlr_status
FROM
    messages_sent m
LEFT JOIN
    delivery_receipts d
ON
    d.message_id = m.id
AND
    d.id = (SELECT MAX(id) FROM delivery_receipts WHERE message_id = m.id)
Run Code Online (Sandbox Code Playgroud)

返回997,148个结果,包括每条消息的最新状态.

这需要22.8688秒来执行.

这是SQL messages_sent:

CREATE TABLE IF NOT EXISTS `messages_sent` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`api_key` varchar(40) NOT NULL,
`to` varchar(15) NOT NULL,
`message` text NOT NULL,
`type` enum('sms','mms') NOT NULL …
Run Code Online (Sandbox Code Playgroud)

php mysql sql database phpmyadmin

7
推荐指数
1
解决办法
294
查看次数