将同一张表的连续行中的同一列与多个ID进行比较

时间:2018-11-27 21:52:49

标签: sql string-comparison

我有一个用户要报告的请求,而我对SQL编程太陌生,不知道如何处理它。

我的用户想为每个员工ID知道两次访问之间的最小,平均和最大天数。我不知道该如何计算出访问1和访问2之间的天数;每个人员ID的访问2和访问3,依此类推。某些人员ID只有一次访问,而其他人(大多数)有多次访问(最多26次)。这是一些数据的快照(整个数据集超过14000条记录):

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
    class Program
    {
        static void Main(string[] args)
        {
            string englishWord = File.ReadAllText("c:/temp/english.txt");
            string polishWord = File.ReadAllText("c:/temp/polish.txt");


            foreach (var lineE in englishWord)
            {
                string lineEnglish = lineE;
            }
            foreach (var lineP in polishWord)
            {
                string linePolish = lineP;
            }
            string result = lineEnglish + " - " + linePolish;

            result = File.WriteAllText"c:/temp/result.txt";


        }
    }
}

我的研究发现,有很多参考资料可以用来比较同一张表中的行,并且我发现了如何使用自连接和datadiff比较单个PersonID的一次访问与下一次访问的比较,但是如何从一个PersonID到另一个接下来,还是只访问1次就跳过那些PersonID?还是访问了多个StaffId的PersonID?

任何想法/建议都将受到极大的赞赏,因为我有两个要求将从中受益。

2 个答案:

答案 0 :(得分:0)

您可以使用分析功能ADD ${JAR_FILE} ${directo}

来自https://www.techonthenet.com/sql_server/functions/lead.php

的示例
LEAD (myvar,1) OVER ()

答案 1 :(得分:0)

对于平均天数,您可以使用汇总:

select personid,
       (datediff(day, min(visitdate), max(visitdate)) * 1.0 / nullif(count(*) - 1, 0)
from t
group by personid;

我使用了SQL Server语法,但是在任何数据库中都存在相同的想法。平均值是最大值减去最小值,然后除以访问次数减去一。