如何使用两个重复变量过滤mysql
我有这样的桌子:如何使用两个重复变量过滤mysql,mysql,Mysql,我有这样的桌子: id name start_date 1 abc 2019-12-27 1 asd 2019-12-27 1 dwq 2019-12-27 1 sre 2019-12-27 1 ers 2019-12-27 1 fas 2019-12-23 1 abc 2019-12-23 1 dwq 2019-12-23 2 wda 2019-12-23 2 wqw
id name start_date
1 abc 2019-12-27
1 asd 2019-12-27
1 dwq 2019-12-27
1 sre 2019-12-27
1 ers 2019-12-27
1 fas 2019-12-23
1 abc 2019-12-23
1 dwq 2019-12-23
2 wda 2019-12-23
2 wqw 2019-12-23
2 rew 2019-12-19
2 sdf 2019-12-19
2 vfd 2019-12-19
2 asd 2019-12-19
我想以某种方式对其进行过滤,以获得ID为1且日期最高的所有记录。当我这样做的时候:
SELECT id,MAX(start_date),name FROM table1 WHERE id=1 GROUP BY name;
我得到了这个结果:
1 abc 2019-12-27
1 asd 2019-12-27
1 dwq 2019-12-27
1 sre 2019-12-27
1 ers 2019-12-27
1 fas 2019-12-23
还有一行名为“fas”,我猜显示它是因为2019-12-23日期的名称是唯一的。如何正确过滤
编辑:我在两列中有重复项-ID和开始日期。对于单个ID,可以有多个日期,当然一个日期可以有多个ID。但我想得到的是具有特定ID和最高可能开始日期的字段。使用
不存在:
SELECT [DISTINCT] *
FROM table1
WHERE id = 1
AND start_date = ( SELECT MAX(start_date)
FROM table1
WHERE id = 1 )
SELECT t.* FROM table1 t
WHERE t.id = 1
AND NOT EXISTS (
SELECT 1 FROM table1
WHERE id = t.id AND start_date > t.start_date
)
请参阅。
结果:
使用不存在
:
SELECT t.* FROM table1 t
WHERE t.id = 1
AND NOT EXISTS (
SELECT 1 FROM table1
WHERE id = t.id AND start_date > t.start_date
)
请参阅。
结果:
您是否只需要那些最高日期等于id=1
的最高日期的name
?如果是这样,您必须在子查询中获取此max_日期并将其用于筛选。有时,在接受回答之前最好等待一段时间。您是否只需要那些名称中的最高日期等于id=1的最高日期?如果是这样的话,您必须在子查询中获取此max_日期,并将其用于筛选。有时最好在接受答案之前等待一段时间。DISTINCT*
是一种矛盾-好吧,这是一种矛盾修饰法或重言式,取决于您的观点。@草莓,如您所见[DISTINCT]
已经包装好了。我的意思是,如果源数据包含重复项(未显示DDL),但OP不需要,那么他必须使用DISTINCT,当然,在这种情况下,他应该指定字段名(语法不允许带DISTINCT的星号)。如果你不知道这一点,那就认为它是一个矛盾修辞法。如果源数据包含重复数据,那么OP有更大的问题需要首先解决。我在两列中重复了-id和StistyDead。对于单个ID,可以有多个日期,当然一个日期可以有多个ID。但我想得到的是具有特定ID和最高可能开始日期的字段。@janoe编辑您的问题。将这些事实(以及表的DDL)添加到其中。DISTINCT*
是一个矛盾-好吧,一个矛盾修饰法或重言式,取决于你的观点。@草莓,如你所见[DISTINCT]
被包装起来了。我的意思是,如果源数据包含重复项(未显示DDL),但OP不需要,那么他必须使用DISTINCT,当然,在这种情况下,他应该指定字段名(语法不允许带DISTINCT的星号)。如果你不知道这一点,那就认为它是一个矛盾修辞法。如果源数据包含重复数据,那么OP有更大的问题需要首先解决。我在两列中重复了-id和StistyDead。对于单个ID,可以有多个日期,当然一个日期可以有多个ID。但我想得到的是具有特定ID和最高可能开始日期的字段。@janoe编辑您的问题。将这些事实(以及表的DDL)添加到其中。