【问题标题】:Unique Name with accompanying date [closed]带有日期的唯一名称[关闭]
【发布时间】:2015-10-16 05:07:05
【问题描述】:

大家好,请看下表

╔═════╦════════════╗
║ Org ║    Date    ║
╠═════╬════════════╣
║  A  ║ 1/1/2015   ║
║  A  ║ 12/3/2015  ║
║  B  ║ 8/10/2015  ║
║  B  ║ 30/5/2015  ║
║  C  ║ 4/4/2014   ║
║  D  ║ 19/11/2014 ║
╚═════╩════════════╝

如何编写查询,以便仅获得一个唯一的组织名称,该名称对应于多个日期的最早日期,即

╔═════╦════════════╗
║ Org ║    Date    ║
╠═════╬════════════╣
║  A  ║ 1/1/2015   ║
║  B  ║ 30/5/2015  ║
║  C  ║ 4/4/2014   ║
║  D  ║ 19/11/2014 ║
╚═════╩════════════╝

提前致谢

【问题讨论】:

  • 你得到了答案,但由于这个概念对你来说似乎是新的,所以这里是解释:你想要在这里做的事情叫做聚合。您可以压缩数据,例如每个组织只显示一个结果行。这个“每个组织”在 SQL 中转换为 GROUP BY Org。然后对于其他每一列,决定要显示什么聚合(MINMAXAVG,...)。在您的情况下,您想查看MIN(Date)
  • Tsql 与 MySQL,这是一个非常奇怪的组合...请删除无效标签。
  • 你真的应该看看下面给出的答案,给我们看一些绿色。

标签: mysql sql database tsql


【解决方案1】:

只需使用MIN 获取最早日期,GROUP BY 仅获取 1 个唯一的组织名称。

    SELECT Org, MIN(Date) AS 'Date' FROM TableName GROUP BY Org

【讨论】:

  • 并且不要在别名中使用单引号。单引号用于字符串文字。双引号用于别名。
  • @TimBiegeleisen,哦,对不起,我没有注意到你已经有了答案,你想让我删除我的吗?
  • 不用担心...这个问题很容易任何人都可以自己解决:-)
【解决方案2】:

您可以使用GROUP BYMIN 函数来获取每个Org 组的最早日期:

SELECT Org, MIN(Date) AS Date
FROM table
GROUP BY Org

【讨论】:

  • 好吧,有一个基本假设
  • 与其抨击反社会的cmets,不如让我们知道假设是什么。为什么您不选择对与此类似的其他答案也发表评论?
  • “日期”与 OP 所描述的不符。 '爆破'?真的吗?
  • 好点,如果Date 列具有非日期时间类型,我不会感到惊讶。
  • 因为你更了解 ;-)
【解决方案3】:

使用 mysql STR_TO_DATEGroup by

Select * from (SELECT * FROM `tbl` order by STR_TO_DATE(Date,'%d/%m/%Y') ASC) as new_tbl group by Org

【讨论】:

  • 不要这样做。首先,是什么让您认为Date 是一个字符串?我觉得这不太可能。然后按 Org 分组,还可以访问 Date(通过选择 *)。由于您没有在其上使用任何聚合函数(MIN、MAX 等),因此您将获得每个组织的匹配日期之一。可能是在 your MySQL 版本中,DBMS 从排序的子查询中选择第一个值,但这并不能保证。不要依赖这个;这只是一个可能会更改的实现细节。
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
相关资源
最近更新 更多