我如何在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)
任何帮助?提前致谢.
我正在尝试获取"分组"记录的第一个和最后一个记录.
更确切地说,我正在做这样的查询
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做这个的方法?
在我的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 获取每个记录的最新记录?
解决方案可能很简单,但我无法理解这一点.
谢谢你的帮助.
可能重复:
检索每个组中的最后一条记录
我有一个表,它有三个字段和数据.
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
按名称顺序尝试了小组,但是按照结果给了小组的最高记录.有人可以指导我吗?
TL; DR:需要每个发件人的最新消息.
在我的Laravel应用程序中,我有两个表:
用户:
消息:
当然还有模特.
用户模型:
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) 有更有效的方法来做以下事情吗?
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> 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) 我之前曾经问过类似的问题,但是没有一个问题具有相同的条件,他们的答案对于这种情况不起作用.
包含消息的表如下所示:
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) 我一直试图解决这个问题已经有一段时间了,似乎无法让它发挥作用.我有一张看起来与此类似的表.
表:问题
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')会有所帮助,但似乎它只是部分帮助我.结果的顺序不正确.所以,我的问题是 - 有什么简单的方法吗? …
我有一个已发送短信的表格,该短信必须加入到送达回执表中才能获得最新的短信状态.
有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)