我对SQL相当新,所以这可能相当简单,但我试图在SQL中编写一个脚本,这样我就可以获得一组数据,但我不想要查询中的第一个或最后一个结果。我可以找到很多关于如何删除第一个结果以及如何删除最后结果但不能同时删除两者的结果。
这是我目前的查询:
SELECT * FROM itinerary Where ID = 'A1234' ORDER BY DateTime ASC
我想根据DateTime删除该选择的第一个和最后一个记录。
答案 0 :(得分:2)
这可能不是执行此操作的最佳方式,但您没有提供任何架构信息,看起来您的ID列不是唯一的。如果你有一个主键可以使用它会更容易。
SELECT * FROM itinerary
WHERE ID = 'A1234'
AND DateTime <
(SELECT MAX(DateTime) FROM itinerary WHERE ID = 'A1234')
AND DateTime >
(SELECT MIN(DateTime) FROM itinerary WHERE ID = 'A1234')
ORDER BY DateTime ASC
这将基本上选择ID为A1234并且DateTime不等于最大或最小日期时间的每条记录。请注意,如果您有多个记录具有相同的DateTime值并且恰好是最小值或最大值,则可能排除的不仅仅是第一个或最后一个。
但这可能还不错。如果没有,您可能需要编写存储过程而不仅仅是ANSI SQL。
答案 1 :(得分:0)
试试这个..
select * from
(select a.*,row_number() over (partition by DateTime order by DateTime desc) as rnm
from itinerary Where ID = 'A1234')x
where rm <> 1 and rm not in (
select max(rm) from
(
select row_number() over (partition by DateTime order by DateTime desc) as rnm
from itinerary Where ID = 'A1234'))
答案 2 :(得分:0)
按相反顺序选择&amp;首先跳过,然后从结果中选择所需的顺序,先跳过。
SELECT * FROM (SELECT *
FROM itinerary
Where ID = 'A1234'
ORDER BY DateTime DESC
LIMIT 1, 18446744073709551615) x ORDER BY DateTime ASC
LIMIT 1, 18446744073709551615
18446744073709551615是最大整数,以防您想知道我选择该值的原因