我一直在试图写一个查询来完善这个示例,但似乎做不到的把戏,因为我仍然收到重复。希望我能得到帮助如何解决这个问题。
SELECT DISTINCT
1.Client
1.ID
1.Thing
1.Status
MIN(1.StatusDate) as 'statdate'
FROM
SAMPLE 1
WHERE
[]
GROUP BY
1.Client
1.ID
1.Thing
1.status
我的输出如下
Client Id Thing Status Statdate
CompanyA 123 Thing1 Approved 12/9/2019
CompanyA 123 Thing1 Denied 12/6/2019
因此,尽管查询是按照我的要求进行的,并显示每个状态的最小状态日期,但我只需要第一个状态日期。我有大约3万行要过滤,所以任何不运行的都会重载查询,使其无法运行。任何帮助都将不胜感激
2条答案
按热度按时间ua4mk5z41#
使用窗口功能:
这将返回每个id的第一行。
l5tcr1uw2#
使用您觉得更舒服/更了解的选项:
其工作方式是按statusdate的顺序对所有行进行顺序编号,每次id更改时都从1重新开始编号。如果你这样收集了所有的数字1,你就有了你的“第一个记录”
或者可以协调一个最小值:
这一个准备了一个包含所有id和mindate的列表,然后将其连接回主表。因此,您可以取回在分组操作中丢失的所有数据;在一个组中不能同时“保留数据”和“丢弃数据”;如果你不仅仅按id分组,你会得到更多的组(正如你所发现的)。如果只按id分组,则会丢失其他列。没有任何方法可以说“按id分组,并获取最小日期,同时获取与最小日期相同行中的所有其他数据”,而不执行“按id分组,获取最小日期,然后将此数据集连接回主数据集以获取该最小日期的其他数据”。如果您尝试在单个分组中完成所有操作,您将失败,因为您要么必须按更多列进行分组,要么对select中的其他数据使用聚合函数,这样会混淆您的数据;当分组完成后,“来自同一行的其他数据”的概念就消失了
请注意,如果两个记录的最小日期相同,则这可能会返回重复的行。行号表单不返回重复的记录,但是如果两个记录具有相同的最小statusdate,那么您将得到哪个是随机的。要强制一个特定的,按更多的东西,这样你就可以确定哪一个会以1结束