SQL 将数字分配给日期,按值分组
Posted
技术标签:
【中文标题】SQL 将数字分配给日期,按值分组【英文标题】:SQL assign numbers to dates, grouped by a value 【发布时间】:2012-05-13 11:02:14 【问题描述】:使用 SQL,我如何为按每家公司分组的日期赋值?
当前表:
Date Company Employees
2012-04-28 Apple, Inc. 7543
2012-04-27 Apple, Inc. 7510
2012-04-26 Apple, Inc. 7484
2012-04-28 Google, Inc. 11303
2012-04-27 Google, Inc. 11300
2012-04-26 Google, Inc. 11280
2012-04-25 Google, Inc. 11278
2012-04-24 Google, Inc. 11254
所需的表:
Date company_day Company Employees
2012-04-28 3 Apple, Inc. 7543
2012-04-27 2 Apple, Inc. 7510
2012-04-26 1 Apple, Inc. 7484
2012-04-28 5 Google, Inc. 11303
2012-04-27 4 Google, Inc. 11300
2012-04-26 3 Google, Inc. 11280
2012-04-25 2 Google, Inc. 11278
2012-04-24 1 Google, Inc. 11254
company_day 的值从每个公司的最早日期开始。 company_day 是公司特定的。
【问题讨论】:
确定公司日的逻辑是什么? @bluefeet 看起来表中最早的一天是 1,然后从那里枚举。 @MatthewPK 这也是我的猜测,但他们需要澄清请求 【参考方案1】:我会首先获取每个公司的MIN
日期。
然后您可以JOIN
该查询的结果并简单地显示它与日期列之间的差异。
SELECT
MyTable.[Date]
,DATEDIFF(MyTable.[Date], MinTable.[MinDate]) + 1 AS Company_Day
,MyTable.[Company]
,MyTable.[Employees]
FROM
MyTable
JOIN
(
SELECT
MIN(b.[Date]) AS MinDate
, b.[Company]
FROM
MyTable b
GROUP BY
b.[Company]
) AS MinTable
ON MinTable.[Company] = MyTable.[Company]
类似的东西。此代码未经测试,但应该很接近。http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediffhttp://www.w3schools.com/sql/func_datediff_mysql.asp
【讨论】:
谢谢马特 - 什么是有效的代码?我的表中有大约 5,000 家公司,因此手动查找 MIN 日期会很困难。 哈 - 你在我发表评论之前就发布了代码。谢谢,让我看看! @MatthewPK 仅供参考 - 有比 w3schools.com 更好的资源可供参考 @bluefeet,我用谷歌搜索了MySQL DATEDIFF
并链接了第一个结果。如果 OP 想要获得更深入的信息,他可以很容易地使用我迄今为止提供的信息来做到这一点。我编辑了一个更官方的链接,以满足任何不足。
@DonnyP 我不是在批评这个答案,我是在提出一个建议不要使用 w3schools 作为参考。这是关于 SO 的常见思想流派,请勿使用 w3schools。以上是关于SQL 将数字分配给日期,按值分组的主要内容,如果未能解决你的问题,请参考以下文章
按 ID 和结果分组,取特定结果的最早日期并分配数字(即结果 1、结果 2)
打字稿 - 类型'值:数字;日期:日期; ' 不可分配给类型 'Record[]'。 ts(2322)