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)

类型“数字”不可分配给类型“日期” - 打字稿未编译

按值而不是引用将 List<T> 分配给另一个 List<T> [重复]

如何将昨天的日期分配给参数C#

t-sql 为学年分配日期