相关疑难解决方法(0)

在GROUP BY中使用LIMIT来获得每组N个结果?

以下查询:

SELECT
year, id, rate
FROM h
WHERE year BETWEEN 2000 AND 2009
AND id IN (SELECT rid FROM table2)
GROUP BY id, year
ORDER BY id, rate DESC
Run Code Online (Sandbox Code Playgroud)

收益率:

year    id  rate
2006    p01 8
2003    p01 7.4
2008    p01 6.8
2001    p01 5.9
2007    p01 5.3
2009    p01 4.4
2002    p01 3.9
2004    p01 3.5
2005    p01 2.1
2000    p01 0.8
2001    p02 12.5
2004    p02 12.4
2002    p02 12.2
2003    p02 10.3
2000    p02 8.7
2006    p02 …
Run Code Online (Sandbox Code Playgroud)

mysql sql ranking greatest-n-per-group

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

获取每组分组SQL结果的最大值记录

如何获得包含每个分组集的最大值的行?

我在这个问题上看到了一些过于复杂的变化,没有一个有很好的答案.我试图把最简单的例子放在一起:

给出如下表格,包含人,组和年龄列,您将如何获得每组中最老的人?(组内的一个平局应该给出第一个字母结果)

Person | Group | Age
---
Bob  | 1     | 32  
Jill | 1     | 34  
Shawn| 1     | 42  
Jake | 2     | 29  
Paul | 2     | 36  
Laura| 2     | 39  
Run Code Online (Sandbox Code Playgroud)

期望的结果集:

Shawn | 1     | 42    
Laura | 2     | 39  
Run Code Online (Sandbox Code Playgroud)

mysql sql greatest-n-per-group

212
推荐指数
6
解决办法
21万
查看次数

为每个类别选择前10条记录

我想在一个查询中返回每个部分的前10条记录.任何人都可以帮忙解决这个问题吗?Section是表中的一列.

数据库是SQL Server 2005.我想按输入的日期返回前10名.部分是业务,本地和功能.对于一个特定日期,我只想要前(10)个业务行(最近的条目),前(10)个本地行和前(10)个特征.

sql sql-server sql-server-2005 greatest-n-per-group

189
推荐指数
13
解决办法
43万
查看次数

如何选择每个类别的最新四个项目?

我有一个项目数据库.每个项目都使用类别表中的类别ID进行分类.我正在尝试创建一个列出每个类别的页面,在每个类别下面我想要显示该类别中的4个最新项目.

例如:

宠物用品

img1
img2
img3
img4
Run Code Online (Sandbox Code Playgroud)

宠物食品

img1
img2
img3
img4
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过查询每个类别的数据库轻松解决这个问题,如下所示:

SELECT id FROM category

然后迭代该数据并查询每个类别的数据库以获取最新的项目:

SELECT image FROM item where category_id = :category_id 
ORDER BY date_listed DESC LIMIT 4

我想弄清楚的是,如果我可以使用1个查询并获取所有数据.我有33个类别,所以我想也许这有助于减少对数据库的调用次数.

任何人都知道这是否可行?或者,如果33次通话不是那么大,我应该这么简单.

mysql sql greatest-n-per-group

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

限制与Laravel的多态多对多关系中的相关记录

我正在使用Laravel 5.1,我需要使用多态多对多关系来限制我提取的相关记录的数量.

我想做的是通过parent_id获取类别列表.对于每个类别,我只想拉四个帖子.

我有这个使用下面的代码,但它导致一堆额外的查询.如果可能,我想只打一次数据库.如果可能的话,我想使用Laravel/Eloquent框架,但我愿意接受这方面的任何工作.

@foreach ($categories as $category)
  @if ($category->posts->count() > 0)
    <h2>{{ $category->name }}</h2>
    <a href="/style/{{ $category->slug }}">See more</a>

    {-- This part is the wonky part --}

    @foreach ($category->posts()->take(4)->get() as $post)

      {{ $post->body }}

    @endforeach

  @endif
@endforeach
Run Code Online (Sandbox Code Playgroud)

PostsController

public function index(Category $category)
{
  $categories = $category->with('posts')
      ->whereParentId(2)
      ->get();

  return view('posts.index')->with(compact('categories'));
}
Run Code Online (Sandbox Code Playgroud)

数据库

posts
    id - integer
    body - string

categories
    id - integer
    name - string
    parent_id - integer

categorizables
    category_id - integer
    categorizable_id - integer
    categorizable_type …
Run Code Online (Sandbox Code Playgroud)

php mysql laravel eloquent laravel-5

15
推荐指数
1
解决办法
2305
查看次数

MySQL Group By各种前N个数

我有这样一张桌子:

Rank      Letter
1         A
2         A
3         B
4         A
5         C
6         A
7         C
8         C
9         B
10        C 

而且我需要按升序排列的每个字母的前2位:

Rank      Letter
1         A
2         A
3         B
5         C
7         C
9         B

我该怎么办?使用GROUP BY获得前1名是相当简单的,但我似乎无法让它适用于多个条目

mysql group-by ranking

7
推荐指数
2
解决办法
8489
查看次数

Mysql GROUP BY和ORDER BY DESC

这是我的完整查询:

SELECT * FROM `clientgroupassign`
LEFT JOIN `clients` ON `clientgroupassign`.clientId = `clients`.clientId
LEFT JOIN `users` ON `carerId` = `userId`
LEFT JOIN 
    (SELECT * FROM 
        (SELECT * FROM `contacts` WHERE `contactGroup` = 4 ORDER BY `contactId` DESC) 
        as `contacts` 
    GROUP BY (`contactClientId`)
    )  AS `contacts` ON `contactClientId` = `clients`.clientId
WHERE groupId = 4
ORDER BY `clients`.clientId
Run Code Online (Sandbox Code Playgroud)

第三次连接存在问题导致脚本执行约1分钟.当我在PMA中分开运行时:

SELECT * FROM (SELECT * FROM `contacts` WHERE `contactGroup` = 4 ORDER BY `contactId` DESC) AS `contacts` GROUP BY (`contactClientId`)
Run Code Online (Sandbox Code Playgroud)

执行仍然很长.

我想要的是为contacts第4组中的每个客户端添加一个,最后添加的行(客户端可以在不同的组中). …

php mysql sql group-by sql-order-by

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

Self-joins on derived tables in mysql- do i need to repeat the subqueries?

I've got to execute a self-joining sql statement on a derived table in mysql. The derived table involves a hairy subquery, and I'm wondering if there's any alternative to actually writing and executing it twice-

SELECT a.* FROM (my hairy subquery) AS a
  LEFT JOIN (my hairy subquery) AS a2 
    ON a.groupname = a2.groupname etc..
Run Code Online (Sandbox Code Playgroud)

mysql sql

6
推荐指数
1
解决办法
2417
查看次数

在Ruby on Rails中获取每个组的前N个项目

我有一个包含“日期”和“频率”字段的模型(频率是整数)。我正在尝试获取每个日期的前5个频率。本质上,我想按日期分组,然后获得每个分组的前5名。

到目前为止,我只检索该组中的前1名:

Observation.channel("channelOne").order('date', 'frequency desc').group(:date).having('frequency = MAX(frequency)')
Run Code Online (Sandbox Code Playgroud)

我想要MAX(frequency)PLUS PER DATE第二,第三,第四和第五大日期。

抱歉,如果这真的很简单,或者我的用语不对;我刚开始使用Rails :)

ruby ruby-on-rails

6
推荐指数
1
解决办法
1305
查看次数

为表中的每个ID选择最新的3条记录

我有一个带有复合主键(ID,Date)的表,如下所示.

+------+------------+-------+
|  ID  |    Date    | Value |
+------+------------+-------+
|   1  | 1433419200 |   15  |
|   1  | 1433332800 |   23  |
|   1  | 1433246400 |   41  |
|   1  | 1433160000 |   55  |
|   1  | 1432900800 |   24  |
|   2  | 1433419200 |   52  |
|   2  | 1433332800 |   23  |
|   2  | 1433246400 |   39  |
|   2  | 1433160000 |   22  |
|   3  | …

sql sqlite group-by sql-order-by greatest-n-per-group

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