【问题标题】:How to add a column for each day in sql?如何在sql中为每一天添加一列?
【发布时间】:2018-03-31 17:49:12
【问题描述】:

我正在尝试为我的大学项目制作出勤管理系统。 我计划为每个月创建一个表。 每个表都会有

OCT(Roll_no int ,Name varchar, (dates...) bool)

这里的日期将从 1 到 30 并存储布尔值以表示出席或缺席。 这是一个好方法吗? 有没有办法在填充数据时为每一天动态添加一列。 另外,如何根据当天填充数据。

编辑:我打算制作一个 UI,它只有两个选项(存在,不存在)对应于每个提取的卷号。 所以,滚号。并且名字已经在表格中了。我将只为每个日期添加对应于表格中每一行的状态(存在或不存在)。

【问题讨论】:

  • 这不是一个好方法。每个日期,而不是每个,您应该在表格中有一行。
  • 您使用的是哪种 SQL?你能发布一个完整的代码吗?请参阅stackoverflow.com/help/how-to-ask,了解如何更好地提问。
  • 哪个数据库?
  • 我正在使用 Postgress sql
  • 关于月份:如果您在表中存储日期,则该日期已经包含月份(加上一年,再加上一天)。利用它,而不是创建太多的表。

标签: sql postgresql


【解决方案1】:

我会使用Firebase。创建一个包含用户列表的节点。然后在使用中创建一个带有时间戳的出勤节点,用于出勤日期。这样更容易解析。您还可以为将其他表中的数据绑定到用户以及为每个用户添加其他属性的能力留出空间。

或者执行 SQL 等价操作,即创建一个用户表列表(名称和用户属性)以及相关键(用户表中的Primary keys 和出勤表中的Foreign keys),其中包含一个出勤列,该列将保存一组代表出席天数的时间戳。

无论哪种方式,您的 UI 只需要处理时间戳并能够通过日期解析它们。

虽然随着时间的推移可能会添加额外的列,因此不会有太多的批量下载。

编辑:在您的情况下,您希望 SQL 列按月排列,让您 select 无论您喜欢哪个月份。对于您的 UI,在注入新出勤时,您只需 add a column to the table if it does not already exist,然后继续提交。在搜索/查看时,您将处理空结果(假设有 2 个月根本没有人参加。您会发现任何异常并继续显示。)

例如:

用户

主键 - 名称

1 - 乔

2 - 唐

3 - 罗伯

出席率

外键 - 日期数组(2017 年 10 月)

1 - 1508198400、1508284800、1508371200

2 - 1508284800

3 - 1508198400、1508371200

【讨论】:

  • 那么,您是否建议出勤列将roll_no作为外键并与之对应,当该卷号的学生出现时会有时间戳?如果是,我将如何获取月度记录?
  • 是的。啊,你想要它按月。这是正确的。因此,您可以使用外键 - Month1Year2017、Month2Year2017 等代替出勤表作为外键 - Year2017 - Year2018 等等。然后只需选择要获取该月出勤率的键和月份列。我编辑了我的答案以反映这一点,
  • 考勤表会有 (roll_no foreign key, oct_2017, nov_2017 .... ) ?如何使用我在问题中提到的 UI 向其中添加数据?
  • 谢谢,现在我明白了,这将起作用。仅在数组列和数组末尾插入时间戳的查询是什么?
  • 不确定 postgress 是否有这个,但你会使用类似于 CONTACT() stackoverflow.com/a/3765635/5488621 的东西。如果不是,您总是可以先下载所选内容,然后将其与新数据一起发回。
【解决方案2】:

我同意戈登的观点。这不是存储数据的好方法。 (这可能是呈现它的好方法)。如果您有一个包含以下列的表,您将能够存储您想要的数据:

role_no (int) 名称(varchar) 日期(日期) 现在(布尔)

如果您想提取特定月份的数据,您可以将其添加到您的 WHERE 子句中:

WHERE DATEPART(mm, [Date]) = 10 -- for October, or pass in a parameter

动态添加列会让人头疼,也很麻烦

【讨论】:

  • 对于每个日期,会有所有的卷号吗?例如:日期 1 将对应所有卷号。然后日期 2 对应所有卷号。
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多