sql - 选择最近的日期
问题描述
我的数据结构如下:
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 和最近一次约会之间的月数。挑战在于每个人都有不同数量的约会。
更新:我同意这样的评论,即这是糟糕的表格设计,需要重新格式化。建议的解决方案是否可以包含有关如何转换表格的建议代码?
解决方案
您将需要重组数据,给定的结构是糟糕的数据库设计。
创建两个单独的表 - 一个称为用户,一个称为约会。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
然后,您将能够编写一个查询以将两个表连接在一起并计算注册日期和约会日期的最小值之间的差异。
推荐阅读
- swift - 从@IBDesignable UIView didSelectRowAt UITableView 导航到 ViewController
- rust - 我如何处理/规避 Rust 中的“无法分配给 ... 在 & 引用后面”?
- c - 如何使用字符串值作为日志文件名
- linux - Bash从文件中添加数字
- python - XML xpath - 如果找不到元素,则传递一个值
- php - Asynchronus-PHP 将大量 csv 数据上传到 MYSQL
- yugabyte-db - yugabytedb是如何实现高数据密度的?
- python - 为什么我必须从函数中检索变量
- angular - 使用 *ngTemplateOutlet 的条件渲染在 formGroup 中无法正常工作
- java - 在线程“main”java.security.InvalidKeyException 中获取异常:无效的 AES 密钥长度:解密编码文本时为 26 个字节