SQL 查询 - Unix 时间戳 - 第二个最新日期

SQL Query - Unix timestamp - second newest date

我是 SQL 的新手,只需要创建一个查询就可以在我的博客上创建一个功能,我正在编写代码,但我仍然坚持恢复第二个最新的 unixtime 日期。

SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') AS newest_postdate_ever,
(SELECT FROM_UNIXTIME(MAX(datum),'%d/%m-%Y') WHERE datum < (SELECT MAX(datum) FROM table-content)) AS second_newest_postdate_ever


[newest_postdate_ever] => 16/04-2022
[second_newest_postdate_ever] => 

但它应该说 [second_newest_postdate_ever] => 15/04-2022

如果您使用的是 MySQL 版本 8,我们可以使用 ROW_NUMBER。如果它是早期版本,我们可以使用变量做同样的事情。我给你两个问题。
一旦我们分配了 ROW_NUMBER DESC,最近的日期就有 rn=1 并且在我们使用 WHERE rn = 2

之前得到那个
CREATE TABLE table_content (id int not null auto_increment primary key,datum date not null);
INSERT INTO table_content (datum)VALUES ('2022-01-01'),('2022-02-01'),('2022-03-01')

对于mySQL 8

WITH CTE AS
(SELECT
  id,
  datum,
  ROW_NUMBER() OVER 
    (ORDER BY datum DESC) AS rn
 FROM table_content
)
SELECT
  id,
  datum,
  rn
FROM CTE;

对于任何版本的 mySQL

SET @rn = 1;
SELECT
  id,
  datum,
  rn
FROM
(SELECT
  id,
  datum,
  @rn AS rn,
  @rn := @rn + 1
 FROM table_content
 ORDER BY datum DESC
) tc;

同样的结果。 rn = 2 就是我们想要的。

id | datum      | rn
-: | :--------- | -:
 3 | 2022-03-01 |  1
 2 | 2022-02-01 |  2
 1 | 2022-01-01 |  3

这给出了你想要的格式。

SET @rn = 1;
SELECT
  CASE 
    WHEN rn = 1 
      THEN "newest_postdate_ever"
    WHEN rn = 2 
      THEN "second_newest_postdate_ever"
    END AS "description",
  datum AS "date"
FROM
(SELECT
  id,
  datum,
  @rn AS rn,
  @rn := @rn + 1
 FROM table_content
 ORDER BY datum DESC
) tc
WHERE rn < 3;

description                 | date      
:-------------------------- | :---------
newest_postdate_ever        | 2022-03-01
second_newest_postdate_ever | 2022-02-01

db<>fiddle here