Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Postgresql,如何列出作者';世界上最早的书是什么时候有桥牌的?_Sql_Postgresql_Inner Join_Greatest N Per Group - Fatal编程技术网

使用Postgresql,如何列出作者';世界上最早的书是什么时候有桥牌的?

使用Postgresql,如何列出作者';世界上最早的书是什么时候有桥牌的?,sql,postgresql,inner-join,greatest-n-per-group,Sql,Postgresql,Inner Join,Greatest N Per Group,我有三张桌子: AUTHOR(auth_id, fname, lname) BOOKAUTHOR(auth_id, book_id) BOOK(book_id, book_name, publish_date) AUTHOR auth_id fname lname ---------------------------- 1 Bob Bobson 2 Sam Samson 3 Bill Billson 4 Sa

我有三张桌子:

AUTHOR(auth_id, fname, lname)
BOOKAUTHOR(auth_id, book_id)
BOOK(book_id, book_name, publish_date)

AUTHOR
auth_id  fname   lname
----------------------------
1        Bob     Bobson
2        Sam     Samson
3        Bill    Billson
4        Sally   Sallson
5        Mary    Marson

BOOKAUTHOR
auth_id    book_id
------------------
1          11
1          12
2          13
2          14
3          15
3          16
4          17
4          18
5          19
5          20

BOOK
book_id   book_name     publish_date
-------------------------------------
11        Bob Book 1    2015-06-05
12        Bob Book 2    2020-07-06
13        Sam Book 1    2016-04-03
14        Sam Book 2    2020-09-27
15        Bill Book 1   2013-08-20
16        Bill Book 2   2015-01-16
17        Sall Book 1   2012-06-27
18        Sall Book 2   2018-03-10
19        Mary Book 1   2003-08-01
20        Mary Book 2   2020-06-05
其中BOOKAUTHOR是一个桥接表。
我想返回三列:作者姓名、他们的第一本书的名称和出版日期。
到目前为止,我已经:

SELECT fname || ' ' || lname AS author_name, MIN(publish_date) AS publish_date
FROM author a, book b, bookauthor ba
WHERE a.auth_id = ba.auth_id
AND b.book_id = ba.book_id
GROUP BY author_name;
返回:

author_name    publish_date
------------------------------
Bob Bobson     2015-06-05
Sam Samson     2016-04-03
Bill Billson   2013-08-20
Sally Sallson  2012-06-27
Mary Marson    2003-08-01
但当我尝试添加书名时,如下面所示

SELECT a.fname || ' ' || a.lname AS author_name, MIN(b.publish_date) AS publish_date, b.book_name AS latest_book
FROM author a, book b, bookauthor ba
WHERE a.auth_id = ba.auth_id
AND b.book_id = ba.book_id
GROUP BY author_name;
它返回作者的所有书籍列表,忽略MIN(b.publish\u日期):

我认为正确的解决方案是以某种方式使用连接,但我对它们的理解还不够透彻。
如果这是一个连接,您是否也可以解释一下他们在做什么?

您可以在上使用连接和
区分:

select distinct on (a.auth_id) a.*, b.*
from author a
inner join bookauthor ba on ba.auth_id = a.auth_id
inner join book b on b.book_id = ba.book_id
order by a.auth_id, b.publish_date

您可以在
上使用联接和
区分:

select distinct on (a.auth_id) a.*, b.*
from author a
inner join bookauthor ba on ba.auth_id = a.auth_id
inner join book b on b.book_id = ba.book_id
order by a.auth_id, b.publish_date

请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并以表格式作为代码输入。暂停总体目标的工作,在第一个表达中删去代码,不要给出你的期望,说出你的期望和原因。对不起,我认为我添加的内容已经足够了。谢谢你让我知道。我现在就编辑它。这是一个常见问题。在考虑发帖之前,请先阅读您的课本和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。反思你的研究。请参见文本上方的投票箭头(&S)。如果你发布一个问题,用一句话作为标题。我已经在文档和这个网站上爬了好几个小时了,我没能找到我需要的东西,很可能是因为缺乏理解。我在这里询问是因为我找不到我需要的答案,所以/SE搜索很差。谷歌。一般来说,表达清楚和概括是很重要的。。。好吧,我评论中的所有内容。但就在现在,谷歌搜索“作者最早的图书网站:stackoverflow.com”,我从2019年开始第一次受到点击。如果我以“2010年之前的sql”作为序言,那么什么都没有。但我得到的是“2015”。但通常情况下,人们不应该提及作者和书籍,而应该尝试用不同的词来表示极值,比如“最伟大的”和“第一”。2009年将会有答案。事实上,这很常见,有一个标记:。请在代码问题中给出一个--cut&paste&runnable代码,包括最小的代表性示例输入代码;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并以表格式作为代码输入。暂停总体目标的工作,在第一个表达中删去代码,不要给出你的期望,说出你的期望和原因。对不起,我认为我添加的内容已经足够了。谢谢你让我知道。我现在就编辑它。这是一个常见问题。在考虑发帖之前,请先阅读您的课本和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。反思你的研究。请参见文本上方的投票箭头(&S)。如果你发布一个问题,用一句话作为标题。我已经在文档和这个网站上爬了好几个小时了,我没能找到我需要的东西,很可能是因为缺乏理解。我在这里询问是因为我找不到我需要的答案,所以/SE搜索很差。谷歌。一般来说,表达清楚和概括是很重要的。。。好吧,我评论中的所有内容。但就在现在,谷歌搜索“作者最早的图书网站:stackoverflow.com”,我从2019年开始第一次受到点击。如果我以“2010年之前的sql”作为序言,那么什么都没有。但我得到的是“2015”。但通常情况下,人们不应该提及作者和书籍,而应该尝试用不同的词来表示极值,比如“最伟大的”和“第一”。2009年将会有答案。事实上,这是如此普遍,有一个标签:。不完全是我在寻找的(可能是我的错误,因为信息不完整),但它让我朝着正确的方向前进。谢谢你的帮助。这和我想要的不完全一样(可能是我的错,因为信息不完整),但它让我走上了正确的方向。谢谢你的帮助。