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
我是 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