标签: greatest-n-per-group

Mysql选择不同

我试图选择mysql表中的重复行它对我来说工作正常,但问题是它不允许我选择该查询中的所有字段,只是让我选择我用作不同的字段名称,lemme写入查询更好的下划线

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Run Code Online (Sandbox Code Playgroud)

第一个工作正常

现在,当我试图选择所有字段时,我最终会出现错误

我试图选择最新的重复项,让我们说,ticket_id 127在行ID 7,8,9上是3次,所以我想选择一次最新的条目,在这种情况下为9,这适用于所有其余的ticket_id的

不知道谢谢

mysql select greatest-n-per-group

33
推荐指数
3
解决办法
11万
查看次数

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

我有一个项目数据库.每个项目都使用类别表中的类别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万
查看次数

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 * FROM pieces where min(price)
Run Code Online (Sandbox Code Playgroud)

我对MySQL不好,请帮忙吗?谢谢

mysql sql aggregate-functions greatest-n-per-group

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

如何从mysql表中选择最新的日期记录集

我将响应存储在mysql表中的各种rpc调用中,其中包含以下字段:

Table: rpc_responses

timestamp   (date)
method      (varchar)
id          (varchar)
response    (mediumtext)

PRIMARY KEY(timestamp,method,id)
Run Code Online (Sandbox Code Playgroud)

什么是选择最近期的所有现有组合响应的最佳方法methodid

  • 对于每个日期,给定方法/ id只能有一个响应.

  • 并非所有呼叫组合都必须存在于给定日期.

  • 有许多方法,数千个ID和至少365个不同的日期

样本数据:

timestamp  method  id response
2009-01-10 getThud 16 "....."
2009-01-10 getFoo  12 "....."
2009-01-10 getBar  12 "....."
2009-01-11 getFoo  12 "....."
2009-01-11 getBar  16 "....."
Run Code Online (Sandbox Code Playgroud)

期望的结果:

2009-01-10 getThud 16 "....."
2009-01-10 getBar 12 "....."
2009-01-11 getFoo 12 "....."
2009-01-11 getBar 16 "....."
Run Code Online (Sandbox Code Playgroud)

(我不认为是同一个问题 - 它不会给我最新的response)

mysql sql date greatest-n-per-group

25
推荐指数
3
解决办法
10万
查看次数

如何在SQL中获取每个组的最后一条记录

我面临着一个相当有趣的问题.我有一个具有以下结构的表:

CREATE TABLE [dbo].[Event]
(
    Id int IDENTITY(1,1) NOT NULL,
    ApplicationId nvarchar(32) NOT NULL,
    Name nvarchar(128) NOT NULL,
    Description nvarchar(256) NULL,
    Date nvarchar(16) NOT NULL,
    Time nvarchar(16) NOT NULL,
    EventType nvarchar(16) NOT NULL,
    CONSTRAINT Event_PK PRIMARY KEY CLUSTERED ( Id ) WITH (
        PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS  = ON
    )
)
Run Code Online (Sandbox Code Playgroud)

所以问题是我必须在网格中显示这些数据.有两个要求.第一个是显示所有事件,而不管是什么应用程序抛出它们.这很简单 - 选择语句可以非常轻松地完成工作.

第二个要求是能够按事件分组事件Application.换句话说,以一种方式显示所有事件,如果ApplicationId重复多次,则只获取每个应用程序的最后一个条目.此查询/视图中不再需要此时事件(Id)的主键.

您可能还注意到事件日期和时间是字符串格式.这没关系,因为它们遵循标准的日期时间格式:mm/dd/yyyy和hh:mm:ss.我可以按如下方式提取:

Convert( DateTime, (Date + ' ' +  Time)) AS 'TimeStamp'
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我在其余列上使用AGGREGATE函数,我不知道它们会如何表现: …

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

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

获取SQL中另一列的每个值的最常见值

我有这样一张桌子:

 Column  | Type | Modifiers 
---------+------+-----------
 country | text | 
 food_id | int  | 
 eaten   | date | 
Run Code Online (Sandbox Code Playgroud)

对于每个国家,我想获得最常吃的食物.我能想到的最好的(我使用的是postgres)是:

CREATE TEMP TABLE counts AS 
   SELECT country, food_id, count(*) as count FROM munch GROUP BY country, food_id;

CREATE TEMP TABLE max_counts AS 
   SELECT country, max(count) as max_count FROM counts GROUP BY country;

SELECT country, max(food_id) FROM counts 
   WHERE (country, count) IN (SELECT * from max_counts) GROUP BY country;
Run Code Online (Sandbox Code Playgroud)

在最后一个陈述中,需要GROUP BY和max()来打破关系,其中两种不同的食物具有相同的数量.

对于概念上简单的事情来说,这似乎是很多工作.有没有更直接的方式来做到这一点?

sql postgresql greatest-n-per-group

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

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万
查看次数

如何选择每组的前N行?

我有两个这样的SQLite表:

 AuthorId | AuthorName
----------------------
 1        | Alice
 2        | Bob
 3        | Carol
 ...      | ....


 BookId | AuthorId | Title
----------------------------------
 1      | 1        | aaa1
 2      | 1        | aaa2
 3      | 1        | aaa3
 4      | 2        | ddd1
 5      | 2        | ddd2
 ...    | ...      | ...
 19     | 3        | fff1
 20     | 3        | fff2
 21     | 3        | fff3
 22     | 3        | fff4
Run Code Online (Sandbox Code Playgroud)

我想创建一个SELECT查询,它将返回每个AuthorId的前N行(例如两行),按Title排序("选择每个作者的前两本书").

样本输出:

 BookId |  AuthorId | AuthorName …
Run Code Online (Sandbox Code Playgroud)

sql sqlite greatest-n-per-group limit-per-group

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

如何将LEFT JOIN限制为SQL Server中的第一个结果?

我有一点SQL几乎正在做我想要它做的事情.我正在使用三个表,一个是Users,UserPhoneNumbers和UserPhoneNumberTypes.我正在尝试获取一个用户列表,其中包含用于导出的电话号码.

数据库本身很旧并且存在一些完整性问题.我的问题是,数据库中每个电话号码应该只有1种类型,但事实并非如此.当我运行这个时,我得到每个人的多行结果,如果它们包含例如两个"Home"数字.

如何修改SQL以获取列出的第一个电话号码并忽略其余的号码?我在SQL Server中,我知道TOP语句.但是,如果我将"TOP 1"添加到LEFT JOIN select语句,它只是给我数据库中的第一个条目,而不是每个用户的第一个条目.

这适用于SQL Server 2000.

谢谢,

SELECT  Users.UserID, 
  Users.FirstName, Users.LastName,
  HomePhone, WorkPhone, FaxNumber

FROM Users

LEFT JOIN
 (SELECT UserID, PhoneNumber AS HomePhone
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Home') AS tmpHomePhone
 ON tmpHomePhone.UserID = Users.UserID
LEFT JOIN
 (SELECT UserID, PhoneNumber AS WorkPhone
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Work') AS tmpWorkPhone
 ON tmpWorkPhone.UserID = Users.UserID
LEFT JOIN
 (SELECT UserID, PhoneNumber AS FaxNumber
 FROM UserPhoneNumbers LEFT JOIN UserPhoneNumberTypes ON UserPhoneNumbers.UserPhoneNumberTypeID=UserPhoneNumberTypes.UserPhoneNumberTypeID
 WHERE UserPhoneNumberTypes.PhoneNumberType='Fax') …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2000 greatest-n-per-group

21
推荐指数
3
解决办法
4万
查看次数