使用 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 表中删除不必要的时间 的相关文章

  • 在 SQL Server 中将 UTC 毫秒转换为 DATETIME

    我想在 SQL Server 中将 UTC 毫秒转换为 DateTime 这可以通过以下代码在 C 中轻松完成 DateTime startDate new DateTime 1970 1 1 AddMilliseconds 1348203
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • 与 SQL 中的 IN 运算符相反

    我怎么能做相反的事情 换句话说 选择所有姓氏不是 Hansen 或 Pettersen 的人 WHERE lastname NOT IN Hansen Pettersen 请参阅 IN 和 NOT IN 运算符 部分SQLite 所理解的
  • 如何将彼此“接近”的纬度/经度点分组?

    我有一个用户提交的纬度 经度点的数据库 并且正在尝试将 接近 点分组在一起 接近 是相对的 但目前看来约为 500 英尺 起初 我似乎只能按前 3 个小数位具有相同纬度 经度的行进行分组 大约是一个 300x300 的盒子 了解当您远离赤道
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Magento 设置脚本中的 ALTER TABLE 不使用 SQL

    乔纳森 戴 https stackoverflow com users 336905 jonathan day says 更新不应采用以下形式 SQL命令 我没遇到过 任何 DDL 或 DML 语句不能 通过 Magento 的配置执行 结
  • RANK() OVER PARTITION 并重置 RANK

    如何获得在分区更改时重新启动的 RANK 我有这张表 ID Date Value 1 2015 01 01 1 2 2015 01 02 1
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合
  • 当我使用可变参数而不是常量参数时,为什么我的内联表 UDF 慢得多?

    我有一个表值内联 UDF 我想过滤该 UDF 的结果以获得一个特定值 当我使用常量参数指定过滤器时 一切都很好 并且性能几乎是瞬时的 当我使用可变参数指定过滤器时 它会花费明显更大的时间块 大约是逻辑读取的 500 倍和持续时间的 20 倍
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp
  • 我可以根据多列删除数据库重复项吗?

    I 不久前问过这个问题 https stackoverflow com questions 4952250 how to delete duplicates from a database table based on a certain
  • SQL Server 抱怨无效的 json

    我正在使用 Azure 数据工厂和 Azure SQL 数据库编写 ETL 工具 数据工厂捕获映射数据流的输出并将其作为字符串插入到 SQL Server 表 Audit OperationsEventLog 的 StatusMessage
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • 有没有办法设置 SQL Server 作业计划每 30 秒运行一次?

    当我尝试创建计划时 我可以选择的最短时间是 1 分钟 有没有办法将其减少到秒 这篇文章在这里SQL Server 作业调度 http www sqlservercentral com articles Administration sqls
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P

随机推荐