我有一个数据库表,其中包含对指定 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_id
和 action
。
因此对于此数据,正确的结果将是:
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/