首页 > 解决方案 > 选择最近的日期

问题描述

我的数据结构如下:

ID | Enrolment_Date | Appointment1_Date | Appointment2_Date | .... | Appointment150_Date |
112  01/01/2015       01/02/2015          01/03/2018                 01/08/2018    
113  01/06/2018       01/07/2018          NULL                       NULL
114  01/04/2018       01/05/2018          01/06/2018                 NULL

我需要一个新变量来计算 enrolment_date 和最近一次约会之间的月数。挑战在于每个人都有不同数量的约会。

更新:我同意这样的评论,即这是糟糕的表格设计,需要重新格式化。建议的解决方案是否可以包含有关如何转换表格的建议代码?

标签: sqlsql-serversql-server-2012

解决方案


您将需要重组数据,给定的结构是糟糕的数据库设计。
创建两个单独的表 - 一个称为用户,一个称为约会。users 表包含用户 ID、注册日期和任何其他特定用户信息。约会表中的每一行都包含用户的唯一 ID 和特定约会日期。像这样构建您的表格将使编写查询以获取自上次约会以来的天数/月数变得更加容易。
例如:

Users Table: 

ID, Enrollment_Date
1, 2018-01-01 
2, 2018-03-02
3, 2018-05-02

Appointments Table: 

ID, Appointment_Date
1, 2018-01-02
1, 2018-02-02
1, 2018-02-10
2, 2018-05-01

然后,您将能够编写一个查询以将两个表连接在一起并计算注册日期和约会日期的最小值之间的差异。


推荐阅读