相关疑难解决方法(0)

获取具有列的最大值的行

表:

UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)

我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)

更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.

sql oracle greatest-n-per-group

556
推荐指数
10
解决办法
56万
查看次数

LEFT JOIN仅第一行

我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.

这是我的结构(当然简化)

饲料

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 …

mysql join left-join groupwise-maximum

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

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:左连接但仅选择创建日期最少的一行

假设我有这张表:

表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)

sql t-sql sql-server join greatest-n-per-group

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