使用 time min() 和 time max() 从选定的某个值 id 表中删除不必要的时间

2024-03-31

我尝试删除不必要的时间,因为我只需要min() and max()数据,来自选定的 ID。并且还通过 Stack Overflow 阅读了同样的问题:

  • SQL 仅选择列上具有最大值的行 https://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column
  • 查找最大和最小时间 https://stackoverflow.com/questions/1277480/finding-max-and-min-times
  • 删除除最新记录之外的所有记录? https://stackoverflow.com/questions/7238983/delete-all-records-except-the-most-recent-one

但很多命令都使用select。因为通过id删除除min()和max()之外的数据。

这是我的查询:

DELETE FROM table1
WHERE ID_karyawan IN (1, 3, 4, 5, 6, 7) -- List all the IDs you want to filter here
  AND jam NOT IN (SELECT MIN(jam) 
                  FROM table1 
                  WHERE ID_karyawan IN (1, 3, 4, 5, 6, 7) -- Repeat the list of IDs here
                  UNION
                  SELECT MAX(jam) 
                  FROM table1 
                  WHERE ID_karyawan IN (1, 3, 4, 5, 6, 7) -- Repeat the list of IDs here
                 );

SELECT 
    table1.ID_karyawan, table1.nama_karyawan, 
    table1.jam, table1.tanggal, table1.arah
FROM 
    table1 
GROUP BY 
    ID_karyawan, nama_karyawan, jam, tanggal, arah

这是我的表(表1):

ID karyawan nama karyawan   jam          tanggal    arah
-------------------------------------------------------------
1   ridho azhar megantara   07:44:45    2023-07-20  masuk
1   ridho azhar megantara   17:04:46    2023-07-20  keluar
3   Hendy Arief Yuwono  17:24:47    2023-07-20  keluar
3   Hendy Arief Yuwono  06:58:41    2023-07-20  masuk
3   Hendy Arief Yuwono  17:24:41    2023-07-20  keluar
4   Ety wulandari           07:51:48    2023-07-20  masuk
4   Ety wulandari           17:04:07    2023-07-20  keluar
5   Joseph Tan          17:03:48    2023-07-20  keluar
5   Joseph Tan          07:40:31    2023-07-20  masuk
6   Herry Joko Susilo   17:04:16    2023-07-20  keluar
6   Herry Joko Susilo   07:26:11    2023-07-20  masuk
6   Herry Joko Susilo   07:26:16    2023-07-20  masuk
7   Martha Ayu Wulandari    07:49:53    2023-07-20  masuk
7   Martha Ayu Wulandari    07:50:23    2023-07-20  masuk
7   Martha Ayu Wulandari    17:04:43    2023-07-20  keluar

进入这个:

ID karyawan nama karyawan   jam          tanggal    arah
-----------------------------------------------------------
1   ridho azhar megantara   07:44:45    2023-07-20  masuk
1   ridho azhar megantara   17:04:46    2023-07-20  keluar
3   Hendy Arief Yuwono  06:58:41    2023-07-20  masuk
3   Hendy Arief Yuwono  17:24:41    2023-07-20  keluar
4   Ety wulandari           07:51:48    2023-07-20  masuk
4   Ety wulandari           17:04:07    2023-07-20  keluar
5   Joseph Tan          17:03:48    2023-07-20  keluar
5   Joseph Tan          07:40:31    2023-07-20  masuk
6   Herry Joko Susilo   07:26:11    2023-07-20  masuk
6   Herry Joko Susilo   17:04:16    2023-07-20  keluar
7   Martha Ayu Wulandari    07:49:53    2023-07-20  masuk
7   Martha Ayu Wulandari    17:04:43    2023-07-20  keluar

但事实上,如果执行查询超过 1 个,所有选定的 id 将被永久删除。

像这样:

3   Hendy Arief Yuwono  06:58:41    2023-07-20 00:00:00.000
3   Hendy Arief Yuwono  17:24:47    2023-07-20 00:00:00.000
8   Aries Krisnawan         07:49:06    2023-07-20 00:00:00.000
8   Aries Krisnawan         07:49:11    2023-07-20 00:00:00.000
8   Aries Krisnawan         17:04:30    2023-07-20 00:00:00.000

所以所有选定的id都消失了。我的查询有误吗?或者您对此有什么建议吗?


您可以首先选择 CTE 中每个 ID 的最小和最大日期,然后删除所有其他行。这就是基本思想:

WITH dates AS
(SELECT 
  id, MIN(yourdate) AS minDate, 
  MAX(yourdate) AS maxDate
 FROM table1
 GROUP BY id)
DELETE FROM table1
  WHERE 
    NOT EXISTS 
      (SELECT 1 FROM dates d 
        WHERE table1.id = d.id 
          AND table1.yourdate IN (d.minDate, d.maxDate));

Here a fiddle https://dbfiddle.uk/MTn9KUuK显示此命令多次执行时不会意外删除任何其他行的示例。

我不清楚您是否需要添加更多条件,GROUP BY或其他任何东西。您应该能够理解这个想法,并根据需要对您的用例进行必要的更改。

最后但重要的一点是:在我的回答中,我采用最小和最大日期,而不是时间。这不是一个错误,但我认为将日期和时间保存在单独的列中是一个非常糟糕的主意。我不知道您是否真的这样做了,或者您只是错误地设置了示例数据的格式。 始终使用一列并在那里存储整个日期和时间。这使得确定最早或最晚日期(时间)变得更加容易,例如这里需要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 time min() 和 time max() 从选定的某个值 id 表中删除不必要的时间 的相关文章

  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • 创建表作为 select 删除 postgresql 中的非空约束

    在 postgres sql 中 创建表时 select 删除了表上的非空约束 例如 对此没有单一命令的解决方案 要基于现有表 包括所有约束 创建表 请使用 create table B like a including constrain
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 模式更新后 jOOQ 生成的类的运行时验证?

    我用org jooq util DefaultGenerator在构建过程中生成 jOOQ 类来表示我的数据库模式 当应用程序运行时 架构预计会在应用程序不知情的情况下发生更改 此类更改可能与已生成的代码兼容 也可能不兼容 如何在运行时检测
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm

随机推荐