我在查询中发现一个问题:
SELECT * FROM stocks_historic
WHERE ticker = x
ORDER BY YEAR ASC
LIMIT 10
当前表格如下:
stocks_historic (
historic_id SMALLSERIAL UNIQUE,
ticker VARCHAR(10) NOT NULL,
year VARCHAR(5) NOT NULL,
eps NUMERIC(6,2) NOT NULL,
operatingCashFlow NUMERIC(12,4) NOT NULL,
shares NUMERIC(12,4) NOT NULL,
cash NUMERIC(12,4) NOT NULL,
currentLiabilities NUMERIC(12,4) NOT NULL,
currentAssets NUMERIC(12,4) NOT NULL,
incomeBeforeTax NUMERIC(12,4) NOT NULL,
incomeTaxExpense NUMERIC(12,4) NOT NULL,
totalDebt NUMERIC(12,4) NOT NULL,
revenue NUMERIC(12,4) NOT NULL,
costOfGoodSold NUMERIC(12,4) NOT NULL,
operatingIncome NUMERIC(12,4) NOT NULL,
equity NUMERIC(12,4) NOT NULL,
capitalExpenditures NUMERIC(12,4) NOT NULL,
fcf NUMERIC(12,4) NOT NULL,
PRIMARY KEY (ticker, year)
);
预期结果:
如果我有15行相同的股票代码,年份从2010年到2025年,我希望得到过去10年的ASC顺序:
historic_id: 1,
year: 2015,
historic_id: 2,
year: 2016,
historic_id: 3,
year: 2017,
...
结果是,我得到了前10个数字,但由于我想要的最高10,是行不通的.
我知道我可以将ASC改为DESC,但是这会以不希望的顺序返回年数,前端预期年数为ASC顺序,所以我必须更改所有内容以适应它。
有没有办法让这10行按ASC排序?
谢谢鲁本。
4条答案
按热度按时间58wvjzkj1#
要返回过去10年的数据,您需要
ORDER BY ... DESC
。如果您希望结果按升序排列,则必须重新排序,例如:虽然可以使用其他排名函数来标识最后10行,例如
ROW_NUMBER() OVER(ORDER BY YEAR DESC)
,但生成的执行计划仍必须对数据进行两次排序-一次用于获取ROW_NUMBER,另一次用于对结果进行重新排序。vecaoik12#
如果按年升序排序
然后再看前十排,你当然会得到前十年。
如果按年降序排列
你会得到最后几年的。
如果要以升序显示最近十年,请先获取结果,然后再排序:
f2uvfpb93#
tv6aics14#
您可以执行子查询来获取数据,并执行外部查询来对其进行排序: