datagrip表之间列的内容差异对比

Posted 星小梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datagrip表之间列的内容差异对比相关的知识,希望对你有一定的参考价值。

  1. 打开你得datagrip软件。
  2. 在顶部菜单中点击 help -> help 。
  3. 在打开的页面中http://host:port/help/differences-viewer-for-database-objects.html中进行访问即可到达数据库对象的差异查看器页面。

SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异

【中文标题】SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异【英文标题】:SQL: Difference Between Current Row of StartTime Column And Previous Row of EndTime Column 【发布时间】:2016-10-17 17:37:21 【问题描述】:

我有一个表,其中有多个列,但我需要找到 StartTime 列的当前行与 EndTime 列的上一行之间的差异。

示例是以下输出。

Batch Number    Start Time  End Time        Difference

100004          8:00:00     8:03:30        
100005          8:05:00     8:07:00         00:01:30
100006          8:08:40     8:15:00         00:01:40
32141           8:18:00     8:22:45         00:03:00
84230           8:25:10     8:33:42         00:02:25
23444           8:40:00     8:43:00         00:06:18
100001          8:50:00     8:52:00         00:07:00            

我是 SQL 新手,正在使用 SQL SERVER 2008 R2。

请帮助我获取简单选择查询中的输出。

【问题讨论】:

LAG() 函数的经典用法。太糟糕了,它是在 Sql Server 2012 上引入的。这里有一些想法:blog.sqlauthority.com/2011/11/24/… “开始时间”和“结束时间”存储为 Varchar 还是 Datetime? @Vercelli,很好,在 SQL SERVER 2008R2 中还有其他方法可以实现吗? @Jatin Patel,它们存储为日期时间。 @Ruhaan:是的,它们在我发布的链接中进行了解释。它们有点复杂,但我建议你看看。 【参考方案1】:
CREATE TABLE #Batches
(
    BatchID     INT,
    StartTime   Datetime,
    EndTime     Datetime,
)
INSERT INTO #Batches
VALUES
(100004,'2016-05-16 08:00:00','2016-05-16 08:03:30'),
(100005,'2016-05-16 08:05:00','2016-05-16 08:07:00'),
(100006,'2016-05-16 08:08:40','2016-05-16 08:15:00'),
(32141 ,'2016-05-16 08:18:00','2016-05-16 08:22:45'),
(84230 ,'2016-05-16 08:25:10','2016-05-16 08:33:42'),
(23444 ,'2016-05-16 08:40:00','2016-05-16 08:43:00'),
(100001,'2016-05-16 08:50:00','2016-05-16 08:52:00')

;WITH CTE AS
(
    SELECT
    BatchID,
    StartTime,
    EndTime,
    ROW_NUMBER() OVER (ORDER BY StartTime) AS Seq
    FROM #Batches
)
SELECT
    b.BatchID,
    b.StartTime,
    b.EndTime,
    CONVERT(VARCHAR(20), DATEADD(SECOND,DATEDIFF(SECOND, bl.EndTime,b.StartTime),0),108) AS Diff,
    DATEADD(SECOND,DATEDIFF(SECOND, bl.EndTime,b.StartTime),0) AS DiffDT
FROM CTE AS b
LEFT OUTER JOIN CTE AS bl ON bl.Seq = b.Seq - 1 -- Last batch   
ORDER BY b.StartTime

【讨论】:

干得好,它为我工作。谢谢【参考方案2】:

我关注这个链接http://blog.sqlauthority.com/2011/11/24/sql-server-solution-to-puzzle-simulate-lead-and-lag-without-using-sql-server-2012-analytic-function/ 这将以秒为单位为您提供差异。

;with cteMain as (
    select *, ROW_NUMBER() over (order by Start_time) sn
      from table)
select m.batch_number, sLag.End_date,  m.Start_time, convert(varchar,DateAdd(Second,DATEDIFF(SECOND, sLag.End_date, m.Start_time),0),108) as time_diff
  from cteMain as m LEFT OUTER JOIN cteMain AS sLag ON sLag.sn = m.sn-1
order by m.batch_number

【讨论】:

好多了,但我需要从 StartTime 的当前行中减去 EndTime 的前一行。此外,它只显示小时差异,而不是完整的时差。 @Ruhaan 我更新了它以显示以秒为单位的差异。它应该显示上一行 EndTime 与当前行 StartTime 之间的日期差异。请发布您的结果。 是的,它的工作原理,但只是以秒为单位显示差异..是否有可能获得 HH:MM:SS 格式的差异? 您提供了可观的帮助..但是 Jatin Patel 的回答对我有用,我必须接受他的回答。也感谢您的支持 Vercelli :) @Ruhaan:不客气。两个答案的方法是一样的。

以上是关于datagrip表之间列的内容差异对比的主要内容,如果未能解决你的问题,请参考以下文章

使用 Datagrip 导入 csv(带有标识列的表)

SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异

Beyond Compare如何比较文件内容的差异 如何对比文件内容的差异

python-文件内容差异对比

数据库结构对比系列教材同义词之间会有些什么差异

Python自动化运维——文件内容差异对比