相关疑难解决方法(0)

MySQL只加入最近一行?

我有一个表客户,存储customer_id,电子邮件和参考.有存储的客户所做的更改历史记录的附加表CUSTOMER_DATA,即当有一个变化作出了新的行插入.

为了在一个表中显示客户信息,这两个表需要连接,但只有从CUSTOMER_DATA最近的行应连接到客户表.

它有点复杂,因为查询是分页的,所以有一个限制和一个偏移量.

我怎么能用MySQL做到这一点?我想我想在那里放一个DISTINCT ......

分钟的查询是这样的 -

SELECT *, CONCAT(title,' ',forename,' ',surname) AS name
FROM customer c
INNER JOIN customer_data d on c.customer_id=d.customer_id
WHERE name LIKE '%Smith%' LIMIT 10, 20
Run Code Online (Sandbox Code Playgroud)

另外,我是否正确地认为我可以用这种方式使用CONCAT?

(我很欣赏INNER JOIN可能是错误的JOIN类型.我实际上不知道不同JOIN之间的区别.我现在要调查它!)

mysql sql join

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

SQL - 如何选择具有最大值列的行

date                 value

18/5/2010, 1 pm        40
18/5/2010, 2 pm        20
18/5/2010, 3 pm        60
18/5/2010, 4 pm        30
18/5/2010, 5 pm        60
18/5/2010, 6 pm        25 
Run Code Online (Sandbox Code Playgroud)

我需要查询具有max(value)的行(即60).所以,这里我们得到两行.从那时起,我需要当天最低时间戳的行(即2010年5月18日,下午3点 - > 60)

sql oracle

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

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

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

MySQL查询,MAX()+ GROUP BY

Daft SQL问题.我有一个像这样的表('pid'是自动增量主col)

CREATE TABLE theTable (
    `pid` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    `timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `cost` INT UNSIGNED NOT NULL,
    `rid` INT NOT NULL,
) Engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)

实际表格数据:

INSERT INTO theTable (`pid`, `timestamp`, `cost`, `rid`)
VALUES
  (1, '2011-04-14 01:05:07', 1122, 1),
  (2, '2011-04-14 00:05:07', 2233, 1),
  (3, '2011-04-14 01:05:41', 4455, 2),
  (4, '2011-04-14 01:01:11', 5566, 2),
  (5, '2011-04-14 01:06:06', 345, 1),
  (6, '2011-04-13 22:06:06', 543, 2),
  (7, '2011-04-14 01:14:14', 5435, 3),
  (8, '2011-04-14 01:10:13', 6767, 3)
;
Run Code Online (Sandbox Code Playgroud)

我想得到每个rid的最新行的PID(每个唯一RID 1个结果).对于样本数据,我想:

pid …
Run Code Online (Sandbox Code Playgroud)

mysql sql database relational-database

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

为多个组选择每组记录中的最新和特定版本

问题:
我有一个记录数据行的表foo.每次更新行时,都会插入一个新行以及修订号.该表看起来像:

id  rev field
1   1   test1
2   1   fsdfs
3   1   jfds
1   2   test2
Run Code Online (Sandbox Code Playgroud)

请注意,在表中,最后一条记录是第一行的较新版本.

有没有人知道查询最新版本的行的有效方法,以及特定版本的记录?例如,对于一个查询rev=2将返回图2,3和第4行(未更换的第一行虽然)而用于查询rev=1的产率的那些行与转<= 1,在重复的ID的情况下,一个具有较高版本号是选择(记录:1,2,3).

我真的不确定这在SQL Server中是否可行...

我不想以迭代的方式返回结果.

sql t-sql sql-server

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

从行获取最大值并连接到另一个表

对不起,如果这是愚蠢的,我真的是一个新手试图指出这一点.

Table A:
ID  Rank Name
1   100  Name1
1    45  Name2
2    60  Name3
2    42  Name4
2    88 Name5

Table B:
ID FileName
1  fn1
2  fn2
Run Code Online (Sandbox Code Playgroud)

我想要的是

1 fn1 name1
2 fn2 name5
Run Code Online (Sandbox Code Playgroud)

这是我的查询的样子,但是当我进行连接时,它给了我多行结果(而不是max)

select B.Id B.FileName,A.Name
FRom B
JOIN ( 
select A.Id, MAX(A.Rank)as ExpertRank 
from A 
group by A.Id
) as NewA on A.Id = B.ID 
join B on A.Rank = NewA.Rank
Run Code Online (Sandbox Code Playgroud)

子查询工作正常,我得到了加入的问题.

我该如何解决?

谢谢.

我有sql server 2008 R2

最后一个是我错过的.

select B.Id B.FileName,A.Name 
FRom B 
JOIN …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

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

在SQL中是否有与argmax相同的东西?

在更一般的意义上:是否有一个函数可以让我找到整列,其中列X中的值是列的最大值?

sql

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

Oracle SQL查询:根据时间检索每个组的最新值

我在Oracle DB中有下表

id     date              quantity
1      2010-01-04 11:00  152
2      2010-01-04 11:00  210
1      2010-01-04 10:45  132
2      2010-01-04 10:45  318
4      2010-01-04 10:45  122
1      2010-01-04 10:30  1
3      2010-01-04 10:30  214
2      2010-01-04 10:30  5515
4      2010-01-04 10:30  210
Run Code Online (Sandbox Code Playgroud)

现在我想检索每个id的最新值(及其时间).示例输出:

id     date              quantity
1      2010-01-04 11:00  152
2      2010-01-04 11:00  210
3      2010-01-04 10:30  214
4      2010-01-04 10:45  122
Run Code Online (Sandbox Code Playgroud)

我只是无法弄清楚如何将它放入查询......

此外,以下选项会很好:

选项1:查询应仅返回最后XX分钟的值.

选项2:id应与另一个具有id和idname的表中的文本连接.id的输出应该是:id-idname(例如1-testid1).

非常感谢您的帮助!

sql oracle top-n greatest-n-per-group

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

在sql中选择每个组的第一行

我有两张桌子.

1-> SM_Employee

 (1) employeeid   
 (2) roleid
 (3) storeid
Run Code Online (Sandbox Code Playgroud)

2-> SM_SalesRepWorkflow

 (1) workflowid
 (2) Salesrepid   foreign key to employeeid
 (3) QuantityAssigned
 (4) QuantityLeft
 (5) month 
 (6) year
Run Code Online (Sandbox Code Playgroud)

通过这些表,我需要从SalesRepId为CurrentMonth和CurrentYear从SM_SalesRepWorkflow顺序中选择每个SalesRep详细信息的第一行.

Workflowid SalesRepId QuantityAssigned QuantityLeft Month Year

WF_101:EMP_101:100:90:May:2013
WF_101:EMP_102:100:100:May:2013
WF_101:EMP_103:100:80:May:2013
WF_102:EMP_101:100:70:May:2013

所以我想要的结果是

WF_101:EMP_101:100:90:May:2013
WF_101:EMP_102:100:100:May:2013
WF_101:EMP_103:100:80:May:2013

因此,SalesRep可以有许多工作流程.但我希望当前月份和年份的每个SalesRep都有第一个.

sql oracle

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

使用MAX和GROUP BY选择所有相应的字段

我有这张桌子:

替代文字

我想提出,将返回每个请求deal_id具有最高的行timestamp,并相应status_id.

所以对于这个例子,我会返回2行:

1226, 3, 2009-08-18 12:10:25
1227, 2, 2009-08-17 14:31:25
Run Code Online (Sandbox Code Playgroud)

我尝试用这个查询来做

SELECT deal_id, status_id, max(timestamp) FROM deal_status GROUP BY deal_id
Run Code Online (Sandbox Code Playgroud)

但它会回错status_id:

1226, 1, 2009-08-18 12:10:25
1227, 1, 2009-08-17 14:31:25
Run Code Online (Sandbox Code Playgroud)

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

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