表:
UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)
我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)
更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.
我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.
这是我的结构(当然简化)
饲料
id | title | content
----------------------
1 | Feed 1 | ...
Run Code Online (Sandbox Code Playgroud)
艺术家
artist_id | artist_name
-----------------------
1 | Artist 1
2 | Artist 2
Run Code Online (Sandbox Code Playgroud)
feeds_artists
rel_id | artist_id | feed_id
----------------------------
1 | 1 | 1
2 | 2 | 1
...
Run Code Online (Sandbox Code Playgroud)
现在我想获得文章并加入第一位艺术家,我想到了这样的事情:
SELECT *
FROM feeds
LEFT JOIN feeds_artists ON wp_feeds.id = (
SELECT feeds_artists.feed_id FROM feeds_artists
WHERE feeds_artists.feed_id = feeds.id
LIMIT 1
)
WHERE feeds.id = '13815'
Run Code Online (Sandbox Code Playgroud)
只是为了获得feed_artists的第一行,但这已经不起作用了.
我无法使用TOP因为我的数据库而且我无法对结果进行分组,feeds_artists.artist_id因为我需要按日期对它们进行排序(我通过这种方式对结果进行分组,但结果不是最新的)
用OUTER …
我有一个表客户,存储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之间的区别.我现在要调查它!)
假设我有这张表:
表A:
id name
--- ---
1 John
Run Code Online (Sandbox Code Playgroud)
表B:
id content Aid Date
--- --- --- ----------
100 abc 1 2017-02-03 11:16:00
101 xyz 1 2017-02-03 11:50:00
Run Code Online (Sandbox Code Playgroud)
我想连接 A 和 B,以便生成的表只有 B 中日期 = 最小值的一行。
我想要的输出:
id name content
--- --- ------
1 John abc
Run Code Online (Sandbox Code Playgroud)
我失败的加入尝试也给了我 (1, John, xyz) 行:
SELECT A.[id], A.[name], B.[content]
FROM A
LEFT JOIN B
ON A.id = B.Aid
Run Code Online (Sandbox Code Playgroud)
后来我尝试做一个 WHERE inside join 但我无法构造它:
SELECT A.[id], A.[name]
FROM A
LEFT JOIN B
ON A.id = (SELECT …Run Code Online (Sandbox Code Playgroud)