SQL查询以比较单个表中彼此之间的记录行

石质公民

我正在尝试使用我认为有些不完整的表中的数据,而且我无法弄清楚如何解决该问题或如何开始构建问题以查看我尝试完成的任务是否甚至可以使用SQL 。这是我正在使用的数据的假设表示(我以CSV格式输入数据,因为此文本字段不支持表格格式):

Date,Time,Traveler,Source,Destination,Travel Status
9/20/2014,1:00pm,James,Station A,Station B,Scheduled
9/20/2014,1:10pm,James,Station A,Station B,Traveling
9/20/2014,1:40pm,James,,Station B,Arrived
9/20/2014,1:00pm,Ann,Station B,Station A,Scheduled
9/20/2014,1:10pm,Ann,Station B,Station A,Traveling
9/20/2014,1:40pm,Ann,,Station A,Arrived
9/20/2014,1:00pm,Karl,Station A,Station B,Scheduled
9/20/2014,1:10pm,Karl,Station A,Station B,Traveling
9/20/2014,1:40pm,Karl,,Station B,Arrived
9/20/2014,1:00pm,Joyce,Station B,Station A,Scheduled
9/20/2014,1:10pm,Joyce,Station B,Station A,Traveling
9/20/2014,1:40pm,Joyce,,Station A,Arrived
9/20/2014,1:00pm,Kelly,Station B,Station B,Scheduled
9/20/2014,1:10pm,Kelly,Station B,Station B,Traveling
9/20/2014,1:40pm,Kelly,,Station B,Arrived
9/20/2014,1:00pm,Sam,Station A,Station A,Scheduled
9/20/2014,1:10pm,Sam,Station A,Station A,Traveling
9/20/2014,1:40pm,Sam,,Station A,Arrived

我试图计算到达的“类型”,例如A-> A类型的到达,B-> B类型的到达以及A-> B和B-> A的到达。

如果数据是这样的:

Date,Time,Traveler,Source,Destination,Travel Status
9/20/2014,1:00pm,James,Station A,Station B,Scheduled
9/20/2014,1:10pm,James,Station A,Station B,Traveling
9/20/2014,1:40pm,James,Station A,Station B,Arrived
9/20/2014,1:00pm,Ann,Station B,Station A,Scheduled
9/20/2014,1:10pm,Ann,Station B,Station A,Traveling
9/20/2014,1:40pm,Ann,Station B,Station A,Arrived

这个简单的查询将针对每种到达类型(即对于A-> B类型)完成此操作:

SELECT COUNT(*) FROM TRAVEL_TBL WHERE 
Travel Status = 'Arrived' AND Source = 'Station A'
AND Destination = 'Station B';

但是,由于包含“已到达”条目的记录中缺少“源”字段,如何执行查询以查找计数?我猜唯一的办法是,按顺序对每个旅行者按时间顺序比较每个记录,并跟踪谁安排了一次旅行的时间以及他们是否到达,并增加此基础的计数。是否可以使用SQL来实现?还是只能用Java或PHP或任何宿主语言来编写应用程序来完成逻辑?

w

与MS SQL 2012+配合使用的一种解决方案是使用LAG()函数访问先前的行:

SELECT COUNT(*) AS "Count A-B"
FROM (
    SELECT 
       Date, Time, Traveler, 
       CASE 
          WHEN Source IS NULL THEN LAG(Source,1) OVER (PARTITION BY Date, Traveler ORDER BY Date) 
          ELSE Source 
       END AS Source, 
       Destination, 
       [Travel Status]
from TRAVEL_TBL) derived_table
WHERE [Travel Status] = 'Arrived' AND Source = 'Station A' AND Destination = 'Station B';

或者在带有自连接的cte中使用ROW_NUMBER()(这是大多数主要数据库中应该使用的功能)的更通用版本:

;WITH cte AS (
    SELECT 
       Date, Time, Traveler, 
       ROW_NUMBER() OVER (ORDER BY Traveler, Date, Time) rn,
       Source,
       Destination, 
       [Travel Status]
    FROM TRAVEL_TBL
) 

SELECT COUNT(*) AS "Count A-B"
FROM (
    SELECT 
       c.Date, c.Time, c.Traveler, 
       CASE 
          WHEN c.Source IS NULL THEN c2.source 
          ELSE c.Source 
       END AS Source,
       c.Destination, 
       c.[Travel Status]
    FROM cte c
    LEFT JOIN cte c2 ON c.rn = c2.rn+1
) derived_table
WHERE [Travel Status] = 'Arrived' AND Source = 'Station A' AND Destination = 'Station B';

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询以比较单个表中彼此之间的记录行

来自分类Dev

SQL Server:查询以比较单个表中的记录并返回不匹配的记录

来自分类Dev

根据彼此之间的间隔更新表。SQL服务器

来自分类Dev

MySQL彼此之间以分钟为单位比较时间戳

来自分类Dev

一行中的所有图像,或彼此之间的所有图像

来自分类Dev

JavaScript在HTML中创建新行,onclick会在彼此之间粘贴值

来自分类Dev

表td / Ul li堆叠在彼此之间

来自分类Dev

GridLayout彼此之间有两个表

来自分类Dev

无法查询graphql查询的结果,因为彼此之间使用2个数组

来自分类Dev

比较彼此之间一定百分比内的3个值

来自分类Dev

如何验证彼此之间的范围列表?

来自分类Dev

熊猫-彼此之间的铲斗事件

来自分类Dev

熊猫-彼此之间的铲斗事件

来自分类Dev

标签在同一行上,彼此之间不在同一行

来自分类Dev

如何比较SQL表中的记录

来自分类Dev

Oracle SQL比较表中的记录

来自分类Dev

比较单个表的SELECT查询

来自分类Dev

让union在彼此之间而不是在彼此下方显示值

来自分类Dev

SQL查询单个表中的更新

来自分类Dev

单个查询中的SQL Server表组合

来自分类Dev

如何对列表中彼此之间处于n内的元素进行分组

来自分类Dev

在2D Numpy数组中删除彼此之间有特定距离的点

来自分类Dev

两个列表中唯一项的列表,彼此之间重复

来自分类Dev

获取列表中的n个元素,每个元素彼此之间的距离相同

来自分类Dev

在单个查询中从多个表中选择记录计数

来自分类Dev

在单个查询中从多个表中选择记录计数

来自分类Dev

Oracle SQL比较数据并检索Oracle DB中两个表之间的不匹配行

来自分类Dev

多对多关系中的sql查询返回单个记录

来自分类Dev

SQL查询从一行中的单个表返回多个键值对

Related 相关文章

  1. 1

    SQL查询以比较单个表中彼此之间的记录行

  2. 2

    SQL Server:查询以比较单个表中的记录并返回不匹配的记录

  3. 3

    根据彼此之间的间隔更新表。SQL服务器

  4. 4

    MySQL彼此之间以分钟为单位比较时间戳

  5. 5

    一行中的所有图像,或彼此之间的所有图像

  6. 6

    JavaScript在HTML中创建新行,onclick会在彼此之间粘贴值

  7. 7

    表td / Ul li堆叠在彼此之间

  8. 8

    GridLayout彼此之间有两个表

  9. 9

    无法查询graphql查询的结果,因为彼此之间使用2个数组

  10. 10

    比较彼此之间一定百分比内的3个值

  11. 11

    如何验证彼此之间的范围列表?

  12. 12

    熊猫-彼此之间的铲斗事件

  13. 13

    熊猫-彼此之间的铲斗事件

  14. 14

    标签在同一行上,彼此之间不在同一行

  15. 15

    如何比较SQL表中的记录

  16. 16

    Oracle SQL比较表中的记录

  17. 17

    比较单个表的SELECT查询

  18. 18

    让union在彼此之间而不是在彼此下方显示值

  19. 19

    SQL查询单个表中的更新

  20. 20

    单个查询中的SQL Server表组合

  21. 21

    如何对列表中彼此之间处于n内的元素进行分组

  22. 22

    在2D Numpy数组中删除彼此之间有特定距离的点

  23. 23

    两个列表中唯一项的列表,彼此之间重复

  24. 24

    获取列表中的n个元素,每个元素彼此之间的距离相同

  25. 25

    在单个查询中从多个表中选择记录计数

  26. 26

    在单个查询中从多个表中选择记录计数

  27. 27

    Oracle SQL比较数据并检索Oracle DB中两个表之间的不匹配行

  28. 28

    多对多关系中的sql查询返回单个记录

  29. 29

    SQL查询从一行中的单个表返回多个键值对

热门标签

归档