gpt4 book ai didi

mysql - 选择数据库的最新/最新添加

转载 作者:行者123 更新时间:2023-11-29 11:19:40 25 4
gpt4 key购买 nike

我有一个数据库表,其中包含对指定 smlouva 执行的操作列表。我需要的是选择为每个 smlouva 执行的最新/最新操作,该操作以时间范围和操作类型为条件。

Action 表如下:

ID (int, Primary), action_ID(int), date(datetime), smlouvy_id(int)

以及一些数据:

id      action  date                   smlouva_id
617872 -9 2016-08-25 08:43:00 114779
617871 -9 2016-08-25 08:43:00 114778
617867 -1 2016-08-25 08:30:00 114777
617865 -1 2016-08-25 08:27:00 114777
617864 -9 2016-08-25 08:27:00 114777
617839 -1 2016-08-25 08:24:00 114776
617838 -9 2016-08-25 08:23:00 114776
617837 105 2016-08-25 08:23:00 114775

我想要应用的约束是:

  • 日期:考虑采取行动的最短日期时间(可选的最长日期时间)
  • 操作:我只需考虑此列表中的操作(100、101、104、105、106、102、103、-9)

在这些约束内,我想为每个 smlouva_id 选择最新/最新的行 - 具有最新日期的行。事实上,我只需要该行的 smlouva_idaction

因此对于此数据,正确的结果将是:

id      action  date                   smlouva_id
617872 -9 2016-08-25 08:43:00 114779
617871 -9 2016-08-25 08:43:00 114778
617864 -9 2016-08-25 08:27:00 114777
617838 -9 2016-08-25 08:23:00 114776
617837 105 2016-08-25 08:23:00 114775

或者同样足够:

action  smlouva_id
-9 114779
-9 114778
-9 114777
-9 114776
105 114775

尝试过但失败

我尝试了几个命令,但它们似乎都不起作用。

SELECT action, smlouva_id 
FROM `pov_action` AS `O`
WHERE (
SELECT MAX(`date`)
FROM `pov_action` AS `I`
WHERE (
(I.action = 100)
OR (I.action = 101)
OR (I.action = 104)
OR (I.action = 105)
OR (I.action = 106)
OR (I.action = 102)
OR (I.action = 103)
OR (I.action = -9)
)
AND (I.`smlouva_id` = O.`smlouva_id`)
)
AND (date >= '2016-08-25 08:28:07')

或者这个:

SELECT action, smlouva_id 
FROM `pov_action`
WHERE (date >= '2016-08-25 09:23:09')
AND (
(action = 100)
OR (action = 101)
OR (action = 104)
OR (action = 105)
OR (action = 106)
OR (action = 102)
OR (action = 103)
OR (action = -9)
)
GROUP BY `smlouva_id`
(HAVING date = MAX(date)) -- optionally does not work with nor without
ORDER BY chdate DESC

服务器版本:5.5.50-MariaDB MariaDB服务器

最佳答案

使用派生表查找每个 smlouva_id 的最后日期,使用 GROUP BY

JOIN 具有该结果的表:

select t1.*
from tablename t1
join (select smlouva_id, max(date) as maxdate
from tablename
where action in (100, 101 ,104, 105, 106, 102, 103, -9)
group by smlouva_id) t2
ON t1.smlouva_id = t2.smlouva_id and t1.date = t2.maxdate
where t1.action in (100, 101 ,104, 105, 106, 102, 103, -9)

关于mysql - 选择数据库的最新/最新添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139686/

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