首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种大数据集的排序算法

一种大数据集的排序算法
EN

Stack Overflow用户
提问于 2010-10-18 19:19:22
回答 2查看 653关注 0票数 0

我不知道术语排序是否最合适,但不管怎样,我有一个由列userA、userB、date、interactionDuration组成的大型数据集。换句话说,数据集包含描述哪些用户正在交互、交互持续了多长时间以及交互日期的行。

我们的目标是通过以下逻辑将这些交互划分为相关和不相关或重要和不重要:如果交互很长,我们认为它是重要的,如果它很短,它是偶然的和“不相关的”。另一方面,如果相同的两个人经常互动(每天或每周)和事件,如果单一互动不会持续很长时间,我们认为这是重要的,因为它不是偶然的。

数据存储在MS SQL Server 2008中,我想知道是否有可能通过使用SQL查询来计算不同对的人之间的交互间隔(以天为单位),或者是否有必要编写自定义例程。

无论如何,我将非常感谢听到任何关于如何执行排序的建议,通过交互的数量,交互持续时间和交互之间的间隔将对分组-是否可以计算两个连续记录之间的时间跨度(按日期排序),然后选择仅使用SQL查询进行共同和/或长时间交互的对的组,或者是否有必要编写自定义算法?

edit1

以下是示例行:

代码语言:javascript
复制
user_A                                      user_B                                      interaction_duration    interaction_date_date
00002781A2ADA816CDB0D138146BD63323CCDAB2    0E3F0A58C6BD5202D1B0D4D4F6A0B05E7A156AC7    532                     2010-09-04
00002781A2ADA816CDB0D138146BD63323CCDAB2    47DFCA60C7D2D9B32ACBE650BCBA53F3DA57CB7B    29                      2010-09-15
00002781A2ADA816CDB0D138146BD63323CCDAB2    8F4ADF3CC26905AF69F930C546954D87DB536E24    83                      2010-09-04
00002781A2ADA816CDB0D138146BD63323CCDAB2    8F4ADF3CC26905AF69F930C546954D87DB536E24    10                      2010-09-01
00002D2354C7080C0868CB0E18C46157CA9F0FD4    372BD190F61BAACDFA2512B71B0C62BCD654D5D1    50                      2010-09-23
00002D2354C7080C0868CB0E18C46157CA9F0FD4    372BD190F61BAACDFA2512B71B0C62BCD654D5D1    105                     2010-09-18
00002D2354C7080C0868CB0E18C46157CA9F0FD4    372BD190F61BAACDFA2512B71B0C62BCD654D5D1    44                      2010-09-08
00002D2354C7080C0868CB0E18C46157CA9F0FD4    372BD190F61BAACDFA2512B71B0C62BCD654D5D1    50                      2010-09-04
00002D2354C7080C0868CB0E18C46157CA9F0FD4    372BD190F61BAACDFA2512B71B0C62BCD654D5D1    21                      2010-09-02

根据交互的频率(稀有性)对上述记录进行排序的最佳方法是什么?是否可以使用sql查询对其进行排序?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-18 20:31:35

如果我没理解错的话,给出这个数据(前10行):

代码语言:javascript
复制
User1   User2   Stamp   Duration (secs)
d   g   09/01/2010  20
b   g   13/01/2010  37
c   k   29/01/2010  15
c   k   12/01/2010  39
e   h   27/01/2010  33
b   i   23/01/2010  46
b   g   04/01/2010  44
b   k   05/01/2010  12
b   k   02/01/2010  9

您想知道哪些用户在给定的时间内经常或长时间地进行交互。我假设您使用的是MS SQL Server 2005或更高版本。

在3到7天的时间内超过10次对话:

代码语言:javascript
复制
WITH Contact(u1, u2, dt) AS (
    SELECT DISTINCT
        user1, user2, stamp
    FROM
        Interactions
)
SELECT
    u1, u2, dt as FirstConversation, MAX(stamp) as LastConversation,  
    COUNT(Duration) AS conversations
FROM
    Interactions INNER JOIN Contact
    ON user1 = u1 AND User2 = u2 AND Stamp >= dt
GROUP BY
    u1, u2, dt
HAVING
    COUNT(duration) > 10 AND 
    DATEDIFF("d", MIN(stamp), MAX(stamp)) BETWEEN 3 and 7
ORDER BY
    1, 2, 3

WITH语句为每对用户计算他们交互的日期,忽略一天中的多个交互。这是我们的基线,用于在该日期之后找到符合我们设置的条件的对话。这由"Stamp >= dt“表示,意思是”显示在该联系人之后进行交互的联系人“。

4天内超过2分钟:

代码语言:javascript
复制
WITH Contact(u1, u2, dt)AS (
    SELECT DISTINCT
        user1, user2, stamp
    FROM
        Interactions
)
SELECT
    u1, u2, dt as FirstConversation, MAX(stamp) as LastConversation,  
    SUM(Duration) AS timespent
FROM
    Interactions INNER JOIN Contact
    ON user1 = u1 AND User2 = u2 AND Stamp >= dt
GROUP BY
    u1, u2, dt
HAVING
    SUM(Duration) > 120 AND 
    DATEDIFF("d", MIN(stamp), MAX(stamp)) BETWEEN 0 and 4
ORDER BY
    1, 2, 3

HTH?

票数 1
EN

Stack Overflow用户

发布于 2010-10-18 19:47:32

我建议在子查询中使用分析函数来确定日期间隔,然后在外部查询中按分析函数的结果排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3958577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档