簡體   English   中英

如何選擇列的最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM