我使用以下存储过程从数据库中获取一些数据。 列meetingDate格式化为datetime,仅包含有效数据。
我如何修改存储过程以便它只显示下一个匹配记录而不是所有记录?
示例:
今天= 2014年2月18日; 数据库包含meetingDate = 20/02 / 2014,27 / 02/2014和04/03/2014的记录; 在这种情况下,结果应该只是20/02/2014的记录,作为未来的下一个匹配的记录。
我的存储过程:
ALTER PROCEDURE [dbo].[FetchMeetings]
AS
BEGIN
SET NOCOUNT ON;
SELECT A.meetingID,
CONVERT(VARCHAR(11), A.meetingDate, 106) AS meetingDate,
A.created,
A.createdBy,
A.updated,
A.updatedBy,
B.speaker AS speaker,
B.topic AS topic
FROM MeetingDates A
INNER JOIN MeetingDetails B
ON A.meetingID = B.meetingID
WHERE meetingDate >= GETDATE()
ORDER BY meetingDate, speaker, topic
FOR XML PATH('meeting'), ELEMENTS, TYPE, ROOT('ranks')
END
非常感谢你提供任何帮助,蒂姆。
答案 0 :(得分:2)
使用SELECT TOP 1
SELECT A.meetingID,
CONVERT(VARCHAR(11), A.meetingDate, 106) AS meetingDate,
A.createdBy,
B.speaker AS speaker,
B.topic AS topic
FROM MeetingDates A
INNER JOIN MeetingDetails B
ON A.meetingID = B.meetingID
WHERE a.meetingDate IN (
SELECT TOP 1(a.meetingDate)
FROM MeetingDates A
WHERE meetingDate >= GETDATE()
ORDER BY meetingDate ASC)
ORDER BY speaker, topic
FOR XML PATH('meeting'), ELEMENTS, TYPE, ROOT('ranks')
答案 1 :(得分:1)
使用窗口函数。它是兼容的sql server 2005 +
这是我的数据
的示例with p as (
select *, dense_RANK() over (order by foryear desc, formonth desc) as rnk
from RISK_TRANS.dbo.mytable
)
select * from p
where rnk = 2
我的钥匙是2014年 - 最后一次和2013-12; 2013-11。它只会像你期望的那样挑选我2013-12
你可以试试这个:(我不确定语法是否正确,我只做了更改,没有运行)
ALTER PROCEDURE [dbo].[FetchMeetings]
AS
BEGIN
SET NOCOUNT ON;
with p as (
SELECT A.meetingID,
CONVERT(VARCHAR(11), A.meetingDate, 106) AS meetingDate,
A.created,
A.createdBy,
A.updated,
A.updatedBy,
B.speaker AS speaker,
B.topic AS topic,
DENSE_RANK() over (order by CONVERT(VARCHAR(11), A.meetingDate, 106) desc) rnk
FROM MeetingDates A
INNER JOIN MeetingDetails B
ON A.meetingID = B.meetingID
WHERE meetingDate >= GETDATE())
select meetingid, meetingdate, createddate, createdby, updated, updatedby, speaker, topic
from p
ORDER BY meetingDate, speaker, topic
FOR XML PATH('meeting'), ELEMENTS, TYPE, ROOT('ranks')
END
答案 2 :(得分:0)
尝试使用SELECT 1构造,请点击此处1