gpt4 book ai didi

c# - 使用 lambda 函数过滤掉重复的(基于所选列)查询结果

转载 作者:行者123 更新时间:2023-11-29 19:44:16 25 4
gpt4 key购买 nike

我有一个查询,它返回一组包含营销事件 ID、发布者 ID、创建日期等的行。我想删除具有相同营销事件 ID 和发布者 ID 的所有行,并检索第一个创建日期(简化示例)。

执行 groupBy 要么只显示 marketingIds 和publisherIds,要么如果我包含creationDate,它不会过滤掉任何内容,因为creationDate 都不同,

我能想到的最好的 SQL 是:

SELECT activityType, uniqueUserId, publisherId, campaignId, nodeID
FROM
(
SELECT activityType , count(Id) EventCount, uniqueUserId, campaignId, publisherId, nodeID , creationDate
FROM Eventlog
WHERE campaignId IN (1687,5872,1819) AND activityType = 'Load'
GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID, creationDate
) AS sub

GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID

但这不会显示创建日期,因为它不包含在分组依据中

简而言之:我想删除具有相同 camapignId 和publisherId 以及其他条件组合的所有行。我想要 lambda 形式的。

我当前的 lambda 函数是:

var test = eventsTotal.GroupBy(x => new { x.CampaignId, x.PublisherId, x.NodeId, x.UniqueUserId });

但这并没有给我我需要的创建日期Atm 我认为唯一的方法似乎是将其作为列表进行排序,并将每个项目与所有其他项目进行比较,看看它是否重复感谢任何帮助

最佳答案

我认为您的问题是您的外部选择语句缺少creationDate。这意味着creationDate不会出现在从数据库发送到您的应用程序的结果集中。

解决方案

SELECT activityType, uniqueUserId, publisherId, campaignId, nodeID, MIN(creationDate) --I added creationDate here.
FROM
(
SELECT activityType , count(Id) EventCount, uniqueUserId, campaignId, publisherId, nodeID , creationDate
FROM Eventlog
WHERE campaignId IN (1687,5872,1819) AND activityType = 'Load'
GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID, creationDate
) AS sub

GROUP BY activityType, uniqueUserId, publisherId, campaignId, nodeID

关于c# - 使用 lambda 函数过滤掉重复的(基于所选列)查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41146544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com