天道酬勤,学无止境

SQL - Select unique rows from a group of results

I have wrecked my brain on this problem for quite some time. I've also reviewed other questions but was unsuccessful.

The problem I have is, I have a list of results/table that has multiple rows with columns

| REGISTRATION | ID     | DATE            | UNITTYPE

| 005DTHGP        | 172   | 2007-09-11  | MBio
| 005DTHGP        | 1966 | 2006-09-12  | Tracker
| 013DTHGP        | 2281 | 2006-11-01  | Tracker
| 013DTHGP        | 2712 | 2008-05-30  | MBio
| 017DTNGP        | 2404 | 2006-10-20  | Tracker
| 017DTNGP        | 508   | 2007-11-10  | MBio


I am trying to select rows with unique REGISTRATIONS and where the DATE is max (the latest). The IDs are not proportional to the DATE, meaning the ID could be a low value yet the DATE is higher than the other matching row and vise-versa. Therefore I can't use MAX() on both the DATE and ID and grouping just doesn't seem to work.

The results I want are as follows;

| REGISTRATION | ID     | DATE            | UNITTYPE

| 005DTHGP        | 172   | 2007-09-11  | MBio
| 013DTHGP        | 2712 | 2008-05-30  | MBio
| 017DTNGP        | 508   | 2007-11-10  | MBio

PLEASE HELP!!!?!?!?!?!?!?

标签

评论

You want embedded queries, which not all SQLs support. In t-sql you'd have something like

select  r.registration, r.recent, t.id, t.unittype
from    ( 
    select  registration, max([date]) recent
    from    @tmp 
    group by 
        registration
    ) r
left outer join 
    @tmp t 
on  r.recent = t.[date]
and r.registration = t.registration 

TSQL:

declare @R table
(
Registration varchar(16),
ID int,
Date datetime,
UnitType varchar(16)
)

insert into @R values ('A','1','20090824','A')
insert into @R values ('A','2','20090825','B')

select R.Registration,R.ID,R.UnitType,R.Date from @R R
inner join
(select Registration,Max(Date) as Date from @R group by Registration) M
on R.Registration = M.Registration and R.Date = M.Date

This can be inefficient if you have thousands of rows in your table depending upon how the query is executed (i.e. if it is a rowscan and then a select per row).

In PostgreSQL, and assuming your data is indexed so that a sort isn't needed (or there are so few rows you don't mind a sort):

select distinct on (registration), * from whatever order by registration,"date" desc;

Taking each row in registration and descending date order, you will get the latest date for each registration first. DISTINCT throws away the duplicate registrations that follow.

select registration,ID,date,unittype
from your_table
where (registration, date) IN (select registration,max(date)
                            from your_table
                            group by registration)    

This should work in MySQL:

SELECT registration, id, date, unittype FROM 
  (SELECT registration AS temp_reg, MAX(date) as temp_date 
  FROM table_name GROUP BY registration) AS temp_table
WHERE registration=temp_reg and date=temp_date

The idea is to use a subquery in a FROM clause which throws up a single row containing the correct date and registration (the fields subjected to a group); then use the correct date and registration in a WHERE clause to fetch the other fields of the same row.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SQL / mysql-选择不重复/唯一,但返回所有列?(SQL/mysql - Select distinct/UNIQUE but return all columns?)
    问题 SELECT DISTINCT field1, field2, field3, ...... FROM table 我正在尝试完成以下sql语句,但我希望它返回所有列,这可能吗? 就像是: SELECT DISTINCT field1, * from table 回答1 您正在寻找一个分组依据: select * from table group by field1 有时可以用一个不同的on语句来编写: select distinct on field1 * from table 但是,在大多数平台上,以上两种方法都不起作用,因为未指定其他列上的行为。 (如果您使用的是第一种方法,则可在MySQL中使用。) 您可以获取不同的字段,并坚持每次选择一个任意行。 在某些平台(例如PostgreSQL,Oracle,T-SQL)上,可以直接使用窗口函数来完成此操作: select * from ( select *, row_number() over (partition by field1 order by field2) as row_number from table ) as rows where row_number = 1 在其他(MySQL,SQLite)上,您需要编写子查询,这些查询将使您将整个表与自身连接(示例),因此不建议这样做。 回答2 从问题的表述中
  • SQL Server:PARTITION BY和GROUP BY之间的区别(SQL Server: Difference between PARTITION BY and GROUP BY)
    问题 这些年来,我一直在对所有类型的汇总查询使用GROUP BY 。 最近,我一直在对一些使用PARTITION BY执行聚合的代码进行逆向工程。 在阅读所有我可以找到的有关PARTITION BY的文档时,听起来很像GROUP BY ,也许还添加了一些额外的功能? 它们是具有相同通用功能的两个版本,还是完全不同? 回答1 它们在不同的地方使用。 group by修改整个查询,例如: select customerId, count(*) as orderCount from Orders group by customerId 但是partition by仅适用于窗口函数,例如row_number : select row_number() over (partition by customerId order by orderId) as OrderNumberForThisCustomer from Orders 通常, group by将它们汇总并计算每行的平均值或总和来减少返回的行数。 partition by不会影响返回的行数,但会更改窗口函数结果的计算方式。 回答2 我们可以举一个简单的例子。 考虑具有以下值的名为TableA的表: id firstname lastname Mark -----------------------------------------
  • SQL按最新日期选择具有两个唯一列的行(SQL selecting rows by most recent date with two unique columns)
    问题 使用以下查询和结果,我正在寻找ChargeId和ChargeType唯一的最新条目。 select chargeId, chargeType, serviceMonth from invoice CHARGEID CHARGETYPE SERVICEMONTH 1 101 R 8/1/2008 2 161 N 2/1/2008 3 101 R 2/1/2008 4 101 R 3/1/2008 5 101 R 4/1/2008 6 101 R 5/1/2008 7 101 R 6/1/2008 8 101 R 7/1/2008 期望的: CHARGEID CHARGETYPE SERVICEMONTH 1 101 R 8/1/2008 2 161 N 2/1/2008 回答1 您可以使用GROUP BY按类型和ID对项目进行分组。 然后,您可以使用MAX()聚合函数来获取最近的服务月份。 以下返回带有ChargeId,ChargeType和MostRecentServiceMonth的结果集 SELECT CHARGEID, CHARGETYPE, MAX(SERVICEMONTH) AS "MostRecentServiceMonth" FROM INVOICE GROUP BY CHARGEID, CHARGETYPE 回答2 因此,这不是请求者所要的,而是对“
  • 获取过去 7 天的平均值(Get average of last 7 days)
    问题 我正在解决一个问题,我有一个日期范围的值。 我想通过对它们求平均值并将日期列重新分配为相对于过去 7 天来合并表中的行。 我缺乏 SQL 经验,可以使用一些帮助。 谢谢你看这个!! 例如,带有日期和值的 7 行。 UniqueId Date Value ........ .... ..... a 2014-03-20 2 a 2014-03-21 2 a 2014-03-22 3 a 2014-03-23 5 a 2014-03-24 1 a 2014-03-25 0 a 2014-03-26 1 结果行 UniqueId Date AvgValue ........ .... ........ a 2014-03-26 2 首先,我什至不确定这是可能的。 我正在尝试解决手头数据的问题。 我想也许使用带有分区的框架窗口将日期滚动到一个日期中并获得平均结果,但我不确定如何在 SQL 中表达。 回答1 我以以下为样本 CREATE TABLE some_data1 (unique_id text, date date, value integer); INSERT INTO some_data1 (unique_id, date, value) VALUES ( 'a', '2014-03-20', 2), ( 'a', '2014-03-21', 2), ( 'a',
  • Flink-Table SQL(十)上
    目录 一、Query 1、指定查询 2、支持的语法 3、操作 二、DDL 1、指定DDL 2、创建表 3、删除表 三、数据类型 四、保留关键字 一、Query SQL查询是用TableEnvironment的sqlQuery()方法指定的。方法将SQL查询的结果作为表返回。表可以用于后续的SQL和表API查询,可以转换为数据集或数据流,也可以写入表链接。SQL和表API查询可以无缝地混合,并进行整体优化并转换为单个程序。 为了访问SQL查询中的表,必须在TableEnvironment中注册该表。可以从表源、表、CREATETABLE语句、数据流或数据集注册表。或者,用户也可以在TableEnvironment中注册外部目录以指定数据源的位置。 为了方便起见,Table.toString()会在TableEnvironment中以唯一的名称自动注册表并返回该名称。因此,表对象可以直接内联到SQL查询中(通过字符串连接),如下例所示。 注意:Flink的SQL支持尚未完成。包含不支持的SQL功能的查询会导致TableException。下面列出了批处理表和流式处理表上SQL支持的功能。 1、指定查询 下面的示例演示如何在已注册和内联表上指定SQL查询。 StreamExecutionEnvironment env = StreamExecutionEnvironment
  • 用于在 Netezza DB 中获取唯一行的 SQL(SQL to get unique rows in Netezza DB)
    问题 我有一个表,其中的行如下: id group_name_code 1 999 2 16 3 789 4 999 5 231 6 999 7 349 8 16 9 819 10 999 11 654 但我想要这样的输出行: id group_name_code 1 999 2 16 3 789 4 231 5 349 6 819 7 654 这个查询有帮助吗? select id, distinct(group_name_code) from group_table; 回答1 你似乎想要: group_name_code不同值和按每组group_name_code最小 id 排序的顺序id 。 Netezza 有DISTINCT关键字,但没有 DISTINCT ON()(Postgres 功能): https://www.ibm.com/support/knowledgecenter/en/SSULQD_7.2.1/com.ibm.nz.dbu.doc/r_dbuser_select.html 你可以: SELECT DISTINCT group_name_code FROM group_table; 没有括号, DISTINCT关键字不需要括号。 但是你不会得到你用这个显示的顺序id 。 有“分析函数”又名窗口函数: https://www.ibm.com/support
  • 数栈SQL优化案例:OR条件优化
    数栈是云原生—站式数据中台PaaS,我们在github上有一个有趣的开源项目:https://github.com/DTStack/flinkxFlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等,也可以采集实时变化的数据,比如MySQL binlog,Kafka等,是全域、异构、批流一体的数据同步引擎,大家如果有兴趣,欢迎来github社区找我们玩~在MySQL中,同样的查询条件,如果变换OR在SQL语句中的位置,那么查询的结果也会有差异,在较为复杂的情况下,可能会带来索引选择不佳的性能隐患,为了避免执行效率大幅度下降的问题,我们可以适当考虑使用Union all 对查询逻辑较为复杂的SQL进行分离。常见OR使用场景,请阅读以下案例:案例一:不同列使用OR条件查询1. 待优化场景SELECT .. .. FROM`t1` a WHERE a.token= '16149684' AND a.store_id= '242950' AND(a.registrationId IS NOT NULL AND a.registrationId<> '') OR a.uid= 308475 AND a.registrationId IS NOT NULL AND a.registrationId<> ''执行计划+-------------
  • ROWID(oracle)-有什么用吗?(ROWID (oracle) - any use for it?)
    问题 我的理解是,ROWID是查询返回的结果中每一行的唯一值。 为什么我们需要这个ROWID? ORACLE中已经有ROWNUM。 在SQL查询中是否使用过ROWID? 回答1 ROWID是一行的物理位置。 因此,这是定位行的最快方法,甚至比主键查找还快。 因此,这在某些类型的事务中很有用,我们需要选择一些行,存储它们的ROWID,然后稍后在DML的where子句中针对那些相同的行使用ROWID。 当我们使用WHERE CURRENT OF更新锁定的行时,Oracle SELECT ... FOR UPDATE语法隐式使用ROWID。 此外,EXCEPTIONS表(在使用EXCEPTIONS INTO子句应用约束时引用)具有ROW_ID列。 这使我们能够快速识别出打破约束的行。 后一个示例指出了另一种通用用法:当我们编写一些通用代码片段时,需要一种用于存储UID的机制,而不必担心数据类型,复合键等。 另一方面,ROWNUM是伪列,用于标记给定结果集中的一行。 它没有永久的意义。 编辑 给定记录的ROWID可以在系统的整个生命周期中发生变化,例如通过表重建。 同样,如果删除一条记录,则可以为该记录赋予新的ROWID。 因此,ROWID从长远来看不适合用作UID。 但是它们足以在事务中使用。 回答2 我现在知道一个例子。 假设您有没有主键的表。 因此此表可以有重复的行。
  • 如何进行嵌套 SQL 选择计数(how to do nested SQL select count)
    问题 我正在查询一个不允许使用DISTINCT 的系统,所以我的替代方法是执行GROUP BY以接近结果 我想要的查询是这样的, SELECT SUM(column1) AS column1, SUM(column2) AS column2, COUNT(DISTINCT(column3)) AS column3 FROM table 对于替代方案,我认为我需要某种类型的嵌套查询, SELECT SUM(column1) AS column1, SUM(column2) AS column2, COUNT(SELECT column FROM table GROUP BY column) AS column3 FROM table 但它没有用。 我很亲近吗? 回答1 You are using the wrong syntax for COUNT(DISTINCT). The DISTINCT part is a keyword, not a function. Based on the docs, this ought to work: SELECT SUM(column1) AS column1, SUM(column2) AS column2, COUNT(DISTINCT column3) AS column3 FROM table Do, however, read
  • 删除 SQL 中的重复字段条目(Removing duplicate field entries in SQL)
    问题 无论如何我可以删除某个表( users )中的所有重复条目? 这是我拥有的条目类型的示例。 我必须说,表users由 3 个字段组成, ID , user和pass 。 mysql_query("DELETE FROM users WHERE ???") or die(mysql_error()); randomtest randomtest randomtest nextfile baby randomtest dog anothertest randomtest baby nextfile dog anothertest randomtest randomtest 我希望能够找到重复的条目,然后删除所有重复项,并留下一个. 回答1 您可以只用一个查询来解决它。 如果您的表具有以下结构: CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL auto_increment, `username` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; 您可以执行类似操作(这将根据用户名和 ID 大于该用户名的较小 ID 删除所有重复用户): DELETE users FROM
  • SQL 查询中没有重复项(No duplicates in SQL query)
    问题 我正在使用内部连接在 MySQL 中进行选择: SELECT DISTINCT tblcaritem.caritemid, tblcar.icarid FROM tblcaritem INNER JOIN tblprivatecar ON tblcaritem.partid = tblprivatecar.partid INNER JOIN tblcar ON tblcaritem.carid = tblcar.carid WHERE tblcaritem.userid=72; 有时我会在结果中得到 tblcaritem.caritemid 的重复项。 我想确保永远不会得到 tblcaritem.caritemid 的重复项,但我该怎么做? 我尝试使用 DISTINCT 但它只是检查整行是否重复,我只想检查 tblcaritem.caritemid,有没有办法? 对不起,如果我没有很好地解释它,我不是最好的 SQL 查询。 回答1 GROUP BY tblcaritem.caritemid 回答2 这里的问题正如您所描述的:您正在检查整行的唯一性,您的数据集最终看起来像这样: CarItemId CarId --------- ----- 1 1 1 2 1 3 2 1 2 2 3 3 您需要没有重复的唯一 CarItemId,这意味着您还需要唯一的 CarId ----
  • SQL - 如何根据唯一值组合行(SQL - How to combine rows based on unique values)
    问题 下表是从另一个表创建的,其中包含 ID、Name、Organ 和 Age 列。 在器官栏中找到的值是指定器官和状况的代码。 使用 CASE 我做了一个这样的表格: -------------------------------------------------------- ID NAME Heart Brain Lungs Kidneys AGE 1318 Joe Smith NULL NULL NULL NULL 50 1318 Joe Smith NULL NULL NULL NULL 50 1318 Joe Smith NULL NULL NULL Below 50 1318 Joe Smith NULL NULL NULL Below 50 1318 Joe Smith NULL NULL Above NULL 50 1318 Joe Smith NULL NULL Above NULL 50 1318 Joe Smith Average NULL NULL NULL 50 1318 Joe Smith Average NULL NULL NULL 50 -------------------------------------------------------- 我想查询这个表并得到以下结果: ---------------------------------
  • 在sql中显示10条记录中的唯一字段(display unique field out of 10 records in sql)
    问题 我的 sql 查询是 select I.[Old Product Code], I.[Trade Name], I.[Short Name], SIL.[BOM Item No_] , CASE when SIL.[Dimension Group Code] = 'IOL' then I.[Group Description] else I.[Short Name] END as GD, CASE when SIL.[BOM Item No_] <> '' then 'Kit' end from [Sales Invoice Header] SIH, [Sales Invoice Line] SIL, [Item] I where I.No_ = SIL.No_ and SIL.[Document No_] = 'PEXP1213-153' and SIH.No_ = SIL.[Document No_] group by I.[Old Product Code], I.[Trade Name], I.[Short Name], SIL.[Dimension Group Code], I.[Group Description], SIL.[BOM Item No_] 我的结果是 在这 21 行中,我有 17 行作为套件。 我需要将这个套件分组并在旧产品代码中显示为一行而不是
  • 如何使用 PHP 进行 SQL 的 GROUP?(How to do SQL's GROUP BY using PHP?)
    问题 我想从数据库表中选择行并使用 PHP 而不是基于参数的 SQL 对它们进行分组(在这种情况下是按项目)。 查询语句: Clothes table id item owner 1 shoes joe 2 pants joe 3 hat joe 4 pants joe 5 hat tom SELECT * from Clothes where owner='joe' 1 shoes joe 2 pants joe 3 hat joe 4 pants joe 这是我希望使用 PHP 而不是 SQL 的GROUP BY item PHP : 1 shoes joe 2 pants joe //count 2 3 hat joe 我确定有一个 PHP 数组函数,我只是不熟悉,想法? 回答1 最简单的方法是利用数组键的唯一性: $grouped = array(); while ($row = $db->fetchResult()) { // or however you get your data if (isset($grouped[$row['item']])) { $grouped[$row['item']]['count']++; } else { $grouped[$row['item']] = $row + array('count' => 1); } } 回答2
  • 为什么Mysql的Group By和Oracle的Group by行为不同(Why Mysql's Group By and Oracle's Group by behaviours are different)
    问题 为什么Mysql的Group By和Oracle的Group by行为不同 我发现很多时候,Mysql的groupBy功能和Oracle的GroupBy功能都表现出不同 很多次我在Oracle中发现错误(实际上是错误的查询),但是Mysql会给出结果 所以这个MySQL怪异行为背后有什么原因吗 回答1 MySQL设计人员将其非标准扩展名添加到GROUP BY中,以使开发更容易,某些查询更有效。 这是他们的理由。 https://dev.mysql.com/doc/refman/8.0/zh-CN/group-by-handling.html 有一种称为ONLY_FULL_GROUP_BY的服务器模式,可以禁用非标准扩展。 您可以使用此语句设置此模式。 SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY' 这是该页面的报价,并强调了重点。 如果禁用了ONLY_FULL_GROUP_BY则对标准SQL使用GROUP BY的MySQL扩展允许选择列表, HAVING条件或ORDER BY列表引用未聚合的列,即使这些列在功能上不依赖于GROUP BY列也是如此。在这种情况下,服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的,这可能不是您想要的。 这里的重要词是不确定的。 这意味着什么? 这意味着随机,但更糟。
  • SQL 难题,如何选择零件的最新日期,但每个零件只有 1 行(唯一)(SQL conundrum, how to select latest date for part, but only 1 row per part (unique))
    问题 今天早上我想把我的头围绕在这个问题上。 我正在尝试显示零件(对于我们的产品)的inventory状态,如果我尝试退回所有零件,此查询只会变得复杂。 让我来梳理一下: 单表inventoryReport 我有一个我希望显示的 X 零件的不同列表,其结果必须是 X # 行(每个零件 1 行显示最新的库存条目)。 表由库存变化的日期条目组成(所以我只需要每个部分的LATEST日期条目)。 包含在这个单一表中的所有数据,因此不需要连接。 目前对于 1 个单部分,它相当简单,我可以通过执行以下 sql(给您一些想法)来完成此操作: SELECT TOP (1) ldDate, ptProdLine, inPart, inSite, inAbc, ptUm, inQtyOh + inQtyNonet AS in_qty_oh, inQtyAvail, inQtyNonet, ldCustConsignQty, inSuppConsignQty FROM inventoryReport WHERE (ldPart = 'ABC123') ORDER BY ldDate DESC 这让我获得了我的 TOP 1 行,每个部分都很简单,但是我需要显示所有 X(比如说 30 个部分)。 所以我需要 30 行,结果是。 当然,简单的解决方案是在我的代码中循环 X# 的 sql 调用(但这会很昂贵
  • 从没有唯一标识的重复记录中获取第一条记录(Get top first record from duplicate records having no unique identity)
    问题 我需要从下面给出的表中的每个重复记录集中获取第一行。 我需要在视图中使用此查询 请不要临时表,因为我已经通过添加标识列和最小函数并分组来完成它。 我需要没有临时表或表变量的解决方案 这只是示例数据。 原始表中有 1000 条记录,我只需要前 1000 条记录的结果,因此不能使用不同的 我正在使用 SQL Server 2005 谢谢。 回答1 答案具体取决于“前 1000 条不同”记录的含义。 如果你的意思是你想返回最多 1000 条不同的记录,不管表中有多少重复,那么写这个: SELECT DISTINCT TOP 1000 id, uname, tel FROM Users ORDER BY <sort_columns> 如果您只想搜索表中的前 1000 行,并且可能返回的不同行远少于 1000 行,那么您可以使用子查询或 CTE 编写它,如下所示: SELECT DISTINCT * FROM ( SELECT TOP 1000 id, uname, tel FROM Users ORDER BY <sort_columns> ) u 如果您不关心返回哪些记录,则ORDER BY当然是可选的。 回答2 查找已订购 1 次或多次的所有产品...(一种重复记录) SELECT DISTINCT * from [order_items] where productid in
  • 在 SQL 中使用 distinct 函数(Using the distinct function in SQL)
    问题 我有一个正在运行的 SQL 查询。 我想知道的是,有没有一种方法可以选择表格中的行,其中其中一列的值是不同的? 当我使用 distinct 函数时,它返回所有不同的行,所以... select distinct teacher from class etc. 这工作正常,但我选择了多个列,所以... select distinct teacher, student etc. 但我不想检索不同的行,我想要老师不同的不同行。 所以这个查询可能会多次返回同一个老师的名字,因为学生值不同,但我想要的是返回教师不同的行,即使这意味着返回老师和一个学生的名字(因为我不需要所有学生)。 我希望我想问的很清楚,但是即使在选择多列时也可以在单列上使用不同的函数,或者有没有其他解决方案可以解决这个问题? 谢谢。 以上只是我举的一个例子。 我不知道使用“distinct”是否可以解决我的问题。 我没有使用老师等,这只是让这个想法得到理解的一个例子。 我正在从不同的表中选择多个列(大约 10 个)。 我有一个查询来获取我想要的表格结果。 现在我想查询该表以查找特定列中的唯一值。 所以再次使用老师的例子,假设我写了一个查询,我有所有的老师和他们教的所有学生。 现在,我想查看此表中的每一行,并通过电子邮件向老师发送消息。 但是我不想多次给老师发电子邮件,只发一次,所以我想从我拥有的表中返回所有列
  • SQL 语法
    1. select 查询 select 查询某些属性列(specific columns)的语法 SELECT column(列的名称),another_column,… FROM mytable(表的名称) select查询所有列 SELECT * FROM mytable(表名) 要添加没有的列 “内容” as 自定义列名称 SELECT id,title,'美国'as country FROM movies; 2.条件查询(constraints) 由于现实中,单单一列的数据可能有上万条,之前的SQL语句很可能运行时会崩溃。 所以我们只需要下载我们需要的数据就好了,为了更精确的查询出特定的数据,我们用下面这个SQL语法:SELECT 查询的WHERE 子句,其中,WHERE后加一个限定条件condition条件查询语法 – WHERE 用来筛选数字类型的属性 SELECT column,another_column,… FROM mytable WHERE condition AND/OR another_condition AND/OR 注:condition描述属性列的 关键字 AND 和 OR 可以组装多个条件, 解释: =,!=,<,<=,>,>=一般在比较大小时使用between 一般用来确定的范围in 一般用来枚举 条件查询语法 – LIKE(模糊查询) 和 %
  • SQL重复记录查询的几种方法
    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 代码如下: select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 代码如下: delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId)>1) 3、查找表中多余的重复记录(多个字段) 代码如下: select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 4、删除表中多余的重复记录(多个字段)