如何选择SQL数据库中的2个最新条目
我对sql是相当陌生的,我在这方面还没有太多的知识,我有一个问题。我试图使用以下查询从数据库表中选择数据:如何选择SQL数据库中的2个最新条目,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我对sql是相当陌生的,我在这方面还没有太多的知识,我有一个问题。我试图使用以下查询从数据库表中选择数据: SELECT Distinct UPPER(M.name) AS 'Member Name', M.memberID AS 'Member ID', (b.bookTitle + ' / ' + a.firstName + ' ' + a.lastName) AS 'Title', l.barCode AS 'barcode', (CONVERT(
SELECT
Distinct
UPPER(M.name) AS 'Member Name',
M.memberID AS 'Member ID',
(b.bookTitle + ' / ' + a.firstName + ' ' + a.lastName) AS 'Title',
l.barCode AS 'barcode',
(CONVERT(VARCHAR(8), lr.dueDate, 5) + ' Renewed ' + CONVERT(VARCHAR(1),
(SELECT COUNT(lr.LoanID)
FROM Loan l, LoanRenewal lr
WHERE lr.LoanID = l.loanID
AND l.memberID = 's002')) + ' times') AS 'Status',
bc.callNumber AS 'Call Number'
FROM
Book b,
Author a,
BookAuthor ba,
bookCopy bc,
Member M,
MemberType mt,
Loan l,
LoanRenewal lr,
PublishWork pw
WHERE
M.memberID = 's002'
AND M.memberID = l.memberID
AND l.loanID = lr.LoanID
AND l.barCode = bc.barCode
AND bc.ISBN = pw.ISBN
AND pw.BookId = b.BookID
AND ba.BookID = b.BookID
AND b.Main_AuthorID = a.authorID
当我运行它时,它返回的结果是
Member Name | Member ID | Title | barcode | Status | Call Number |
LIM HAI MEI | S002 | Developing an App / Ben Grimm| 1234567 | 20-02-16 Renewed 4 times|TK5105.887 Kar|
LIM HAI MEI | S002 | Java 101 / Yee Chak Thong | abcdefg | 20-02-16 Renewed 4 times|TK5105.886 Kar|
LIM HAI MEI | S002 | Java 101 / Yee Chak Thong | abcdefg | 25-02-16 Renewed 4 times|TK5105.886 Kar|
LIM HAI MEI | S002 | Java 101 / Yee Chak Thong | abcdefg | 28-02-16 Renewed 4 times|TK5105.886 Kar|
但我希望它返回的是这个,因为我只需要最近的记录,以及如何动态隔离数据
Member Name | Member ID | Title | barcode | Status | Call Number |
LIM HAI MEI | S002 | Developing an App / Ben Grimm| 1234567 | 20-02-16 Renewed 1 times|TK5105.887 Kar|
LIM HAI MEI | S002 | Java 101 / Yee Chak Thong | abcdefg | 28-02-16 Renewed 4 times|TK5105.886 Kar|
请帮助我,我找不到合适的动态代码,而不是硬编码这取决于是否有一个字段,您可以根据该字段对新鲜度进行排名,我在上面的查询中看不到这一点。假设你有,你想要的是像这样使用行数函数-
SELECT
<FieldList>
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY Newness DESC) Ix,
<FieldList>
FROM
<Tables>) x
WHERE
Ix <=2
这取决于有一个字段,您可以根据该字段对新鲜度进行排名,这在上面的查询中是看不到的。假设你有,你想要的是像这样使用行数函数-
SELECT
<FieldList>
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY Newness DESC) Ix,
<FieldList>
FROM
<Tables>) x
WHERE
Ix <=2
您需要在列StatusMax上使用Group By&聚合是最近的一个
SELECT [MEMBER NAME],[MEMBER ID],[TITLE],[BARCODE],MAX(STATUS),[CALL NUMBER]
FROM (
--YOUR CODE MENTIONED IN QUESTION
)AS A
GROUP BY [MEMBER NAME],[MEMBER ID],[TITLE],[BARCODE],[CALL NUMBER]
您需要在列StatusMax上使用Group By&聚合是最近的一个
SELECT [MEMBER NAME],[MEMBER ID],[TITLE],[BARCODE],MAX(STATUS),[CALL NUMBER]
FROM (
--YOUR CODE MENTIONED IN QUESTION
)AS A
GROUP BY [MEMBER NAME],[MEMBER ID],[TITLE],[BARCODE],[CALL NUMBER]
你说的“最新”到底是什么意思?我无法解释,但你可以说我想在状态中找到最新的日期,但也要区分两个不同的标题如果你对标题有更好的名称,请告诉meI建议你学习现代显式连接语法。更易于编写而无错误,更易于阅读和维护,并且在需要时更易于转换为外部联接。我的分组依据?我在那里看不到任何聚合函数…-20多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法所取代,不鼓励使用它。最新的确切含义是什么?我无法真正解释,但你可以说,我想在状态中查找最新的表,但在两个不同的表之间也有区别标题如果您对标题有更好的名称,请告诉meI建议您学习现代显式连接语法。更易于编写而无错误,更易于阅读和维护,并且在需要时更易于转换为外部联接。我的分组依据?我在那里看不到任何聚合函数…-20多年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式已被正确的ANSI连接语法所取代,因此不鼓励使用它。等待这项工作。为什么这项工作?我不理解这项工作,因为我使用group by对所有类似列进行分组,并根据您的要求,即最近日期的MAXSELECT标题,COUNTTILE FROM--您在问题中提到的代码是一组一组的标题等待此项工作为什么我不理解此项工作会起作用,因为我使用GROUP BY对所有类似列进行分组,并根据您的要求使其成为不同的记录,即最近日期的MAXSELECT标题,COUNTTitle FROM——您在问题中提到的代码是按标题分组的