我有一个表客户,存储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之间的区别.我现在要调查它!)
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)
我有一个项目数据库.每个项目都使用类别表中的类别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次通话不是那么大,我应该这么简单.
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) 问题:
我有一个记录数据行的表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中是否可行...
我不想以迭代的方式返回结果.
对不起,如果这是愚蠢的,我真的是一个新手试图指出这一点.
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) 我在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).
非常感谢您的帮助!
我有两张桌子.
1-> SM_Employee
Run Code Online (Sandbox Code Playgroud)(1) employeeid (2) roleid (3) storeid
2-> SM_SalesRepWorkflow
Run Code Online (Sandbox Code Playgroud)(1) workflowid (2) Salesrepid foreign key to employeeid (3) QuantityAssigned (4) QuantityLeft (5) month (6) year
通过这些表,我需要从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都有第一个.
我有这张桌子:

我想提出,将返回每个请求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)