【问题标题】:Select Max Date in Year Month Day Format选择年月日格式的最大日期
【发布时间】:2023-03-25 07:02:02
【问题描述】:

我有一张桌子,我从中抽取了以下样本:

Item    <other columns> year month day
----    -- ------------ ---- ----- ---
VX4O    GL 630.5938     2012 7     20
BX2T    GL 0            2012 7     13
MWB806I GL 92004.72     2012 6     15
4XU     GL 17.125       2012 7     20
VL4O    GL 130.5        2012 7     20
MWB806I GL 92004        2012 10    26
MWB806I GL 92005        2012 11    30
3PU     GL 25           2012 7     20
VC4O    GL 630.6094     2012 7     20
MWB806I GL 92005        2012 11    2

第一列为Item,后三列为年、月、日。

如何选择每件商品的最长日期?

【问题讨论】:

  • 不,它在 SQL 数据库的表中
  • 是多字段的表还是逗号分隔字符串的单字段?
  • @Jake1164 "最后三个分别是年、月、日。"

标签: sql sql-server tsql sql-server-2005 max


【解决方案1】:
SELECT Item, MAX(CONVERT(DATETIME, RTRIM([year]) 
  + RIGHT('0'+RTRIM([month]), 2) 
  + RIGHT('0'+RTRIM([day], 2)
)
FROM dbo.table
GROUP BY Item;

现在您确实应该考虑修复此架构。为什么要分别存储年/月/日?它所做的只是使这样的计算变得更加困难,并阻止任何正确的验证(您可以对基本内容进行检查约束,但对于闰年之类的事情要复杂得多)。而且它不会为您节省任何空间(事实上,如果月/日是 int 或如果您可以使用 smalldatetime,您会失去空间)。

【讨论】:

  • 这仅适用于 Item 是单独的字段,而不是单个逗号分隔的字符串。
  • @Jak1164 可以合理地假设因为 OP 声明最后三个值是单独的列,尽管我们在这里讨论的是单独的列的格式。
  • 不幸的是,我对日期格式没有太多控制权。这是我无法更改的应用程序的数据转储....
  • @Flashgordan 这并不意味着您使用的表必须与数据转储格式匹配。您可以将他们的数据放入临时表中,然后将其正确存储在您自己的表中。
  • 通过正确存储我想您的意思是将数据存储在日期时间字段中?您将如何从这三个字段中创建它?
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多