[英]How to choose a max value of a column
我的问题似乎很简单,但我无法解决。
这就是我所拥有的:
TIME MAXVERSION
13-12-31 1
13-12-31 2
14-12-31 1
14-12-31 2
14-12-31 3
15-12-31 1
15-12-31 2
15-12-31 3
16-12-31 1
这就是我想要的:
TIME MAXVERSION
13-12-31 2
14-12-31 3
15-12-31 3
16-12-31 1
我已经试过了:
select referencetid as time max(version) over (partition by referencetid order by version desc) as maxversion
from D101200.PSD_BEFOLKNING_REFERENCE
where to_char(referencetid, 'mm-dd') = '12-31'
and to_char(referencetid, 'yy-mm-dd') between ('07-12-31') and ('16-12-31')
order by referencetid;
这让我有点想要,但不完全是:
TIME MAXVERSION
13-12-31 2
13-12-31 2
14-12-31 3
14-12-31 3
14-12-31 3
15-12-31 3
15-12-31 3
15-12-31 3
16-12-31 1
这给了我正确的版本,但是数据集的大小并没有减少,这就是我想要的。
任何帮助都非常可观!
您在寻找GROUP BY
吗?
select Time,
Max(MaxVersion) as MaxVersion
from MyTable
group by Time
order by Time
您需要修复日期算法! 在查询中始终使用ISO标准YYYY-MM-DD(或YYYYMMDD)格式。 不要使用字符串进行日期比较。
那么,您的问题的答案是一个简单的group by
:
select referencetid as time, max(version)
from D101200.PSD_BEFOLKNING_REFERENCE
where to_char(referencetid, 'mm-dd') = '12-31' and
referencetid between date '2007-12-31' and date '2016-12-31'
group by referencetid
order by referencetid;
假设您在referencetid
上有一个索引,我建议您只显式列出这些值:
select referencetid as time, max(version)
from D101200.PSD_BEFOLKNING_REFERENCE
where referencetid in (date '2007-12-31', date '2008-12-31', date '2009-12-31',
date '2010-12-31', date '2011-12-31', date '2012-12-31',
date '2013-12-31', date '2014-12-31', date '2015-12-31',
date '2016-12-31')
group by referencetid
order by referencetid;
这使查询更易于使用索引进行优化。
今天似乎有很多问题要问过去N年的12月31日左右
SELECT referencetid as time,
max(version) as maxversion
FROM D101200.PSD_BEFOLKNING_REFERENCE
WHERE referencetid IN (
DATE '2016-12-31',
DATE '2015-12-31',
DATE '2014-12-31',
DATE '2013-12-31',
DATE '2012-12-31',
DATE '2011-12-31',
DATE '2010-12-31',
DATE '2009-12-31',
DATE '2008-12-31',
DATE '2007-12-31'
)
GROUP BY referencetid
ORDER BY referencetid;
在日期列上使用TO_CHAR
(或其他函数)作为过滤器的一部分将阻止查询使用该列上的任何索引(您将需要基于函数的索引)。
select
referencetid as time,
max(version)as maxversion
from D101200.PSD_BEFOLKNING_REFERENCE
where to_char(referencetid, 'mm-dd') = '12-31'
and to_char(referencetid, 'yy-mm-dd') between ('07-12-31') and ('16-12-31')
group by referencetid
order by referencetid
您可以使用此代码
正如许多人已经回答的那样,出于某种考虑,您在寻找分组依据,请在此处查看此示例或其他示例以学习如何使用它,这是一个很好的服务来尝试查询sqlfiddle
select
referencetid as Time,
max(version) as maxversion
from D101200.PSD_BEFOLKNING_REFERENCE
where to_char(referencetid, 'mm-dd') = '12-31'
and to_char(referencetid, 'yy-mm-dd') between ('07-12-31') and ('16-12-
31')
group by referencetid
order by referencetid;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.