gpt4 book ai didi

MySQL 日期时间与上一行的比较

转载 作者:行者123 更新时间:2023-11-29 14:30:48 24 4
gpt4 key购买 nike

我有一个包含两个日期列的表。 DATE1 有时为 NULL,有时包含重复值。 DATE2 始终是已填充且唯一的。我的表格按最新的 DATE2 日期排序。

我想创建一个新的日期列,其中 DATE1 将被选中,除非它的值与下一行重复或者为 NULL。在本例中,我想获取 DATE2 的值。我还需要两个 bool 列来告诉我何时满足这些条件。让我用一个例子来演示,这样会更清楚。

在下表中,第 5 行和第 6 行的值为 2011 年 7 月 27 日,因此我想将第 5 行的新日期列设置为2011 年 8 月 4 日 (即 DATE2)。在第 3 行中,DATE1 的值为 NULL,因此我想采用 DATE2 的值。

我尝试了一些内部选择语句,但无法使其工作。有什么想法吗?

我的表当前在数据库中的情况:

    Row     DATE1           DATE2
--------------------------------------
1 Oct 10, 2011 Nov 13, 2011
2 Oct 10, 2011 Oct 10, 2011
3 NULL Oct 8, 2011
4 Aug 12, 2011 Aug 12, 2011
5 Jul 27, 2011 Aug 4, 2011
6 Jul 27, 2011 Jul 28, 2011
7 Jul 1, 2011 Jul 26, 2011
8 May 24, 2011 Jun 13, 2011

我期望的最终结果是这样的:

    Row     FINAL_DATE      DATE1_DUPLICATE   DATE1_WAS_NULL
----------------------------------------------------------
1 Nov 13, 2011 TRUE FALSE
2 Oct 10, 2011 FALSE FALSE
3 Oct 8, 2011 FALSE TRUE
4 Aug 12, 2011 FALSE FALSE
5 Aug 4, 2011 TRUE FALSE
6 Jul 27, 2011 FALSE FALSE
7 Jul 1, 2011 FALSE FALSE
8 May 24, 2011 FALSE FALSE

非常感谢!

最佳答案

这可以通过顺序扫描表并使用 MySQL 变量来处理。您可以在(更新)SQL-fiddle中进行测试:

SELECT date2
, dd
, DATE_FORMAT(dd, '%b %e, %Y') AS final_date
, date1_duplicate
, date1_was_null
FROM
( SELECT date2
, COALESCE( (date1 = @d OR date1 = @prev), FALSE)
AS date1_duplicate
, (date1 IS NULL) AS date1_was_null
, @d := CASE WHEN (date1 = @d OR date1 = @prev)
THEN date2
ELSE COALESCE(date1, date2)
END AS dd
, @prev := date1 AS pre
FROM tableX AS t
CROSS JOIN
( SELECT @d := DATE('1000-01-01')
, @prev := @d
) AS dummy
ORDER BY date2 ASC
) AS tmp
ORDER BY date2 DESC
;

关于MySQL 日期时间与上一行的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com