簡體   English   中英

如何將時間戳從一個范圍縮放到另一范圍?

[英]How to scale timestamp from one range to another range?

我有帶有項目更改時間戳的表:

  • ID:INT
  • 項目:INT-外鍵
  • 創建時間:TIMESTAMP

我需要某些項目將創建的時間戳壓縮到某個范圍。 即:

  • src范圍:1.10.2015 00:00-4.10.2015 23:59
  • dst范圍:1.10.2015 00:00-1.10.2015 23:59
  • 因此,示例TIMESTAMP如下所示:
    • 2.10.2015 00:00-> 1.10.2015 6:00
    • 3.10.2015 00:00-> 1.10.2015 12:00
    • 2015年10月4日00:00-> 2015年10月1日18:00
    • 2015年10月4日12:00-> 2015年10月1日21:00

我需要保留生成的時間戳的年,月,日,時,分,秒部分。 不得將秒/分鍾取整為零。

縮放精度無關緊要,但是通過創建的時間戳進行的更改順序必須保持與縮放之前相同 我不太在乎其他縮放細節:是開始/結束時間,包含時間/排除時間,還是縮放至6:00/5:59小時。

我可以使用一些外部應用程序來完成此任務,該應用程序可以自行對其進行轉換,然后更新時間戳。 但是,我現在只需要使用SQL即可。 可能嗎? 它可能是特定於postgres的。

您可能會假設在應用縮放后不會發生沖突。

這樣的東西?

select id, item, (' ['||created||', '||created_l- '00:00.000001'::time||') ' )::tsrange as some_range from (
select id, item, created  , lead(created) over(order by created)  created_l from my_table  order by created) q1
with r (src, dst) as ( values
    (
        tsrange('2015-10-01', '2015-10-05', '[)'),
        tsrange('2015-10-01', '2015-10-02', '[)')
    ),
    (
        tsrange('2015-10-06', '2015-10-10', '[)'),
        tsrange('2015-10-02', '2015-10-03', '[)')
    )
), t (id, src) as ( values
    (1,'2015-10-02 00:00'::timestamp),
    (2,'2015-10-03 00:00'),
    (3,'2015-10-04 00:00'),
    (4,'2015-10-04 12:00'),
    (5,'2015-10-06 11:00'),
    (6,'2015-10-07 15:00')
)
select
    t.id, t.src,
    lower(r.dst) + rank() over(
            partition by r.dst order by t.src
    ) * interval '1 second' as squeezed
from
    t
    inner join
    r on t.src <@ r.src
;
 id |         src         |      squeezed       
----+---------------------+---------------------
  1 | 2015-10-02 00:00:00 | 2015-10-01 00:00:01
  2 | 2015-10-03 00:00:00 | 2015-10-01 00:00:02
  3 | 2015-10-04 00:00:00 | 2015-10-01 00:00:03
  4 | 2015-10-04 12:00:00 | 2015-10-01 00:00:04
  5 | 2015-10-06 11:00:00 | 2015-10-02 00:00:01
  6 | 2015-10-07 15:00:00 | 2015-10-02 00:00:02

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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