【问题标题】:Can I do this in sql?我可以在 sql 中执行此操作吗?
【发布时间】:2018-07-24 14:11:35
【问题描述】:

我正在尝试在**Date_Enter,Date_Process,Date_Shipment** 中获取具有最高列的**ID_RE**

例如,这里有一个三行。

 - **1,2012-02-01,2016-02-01,2015-02-01,Send for MX4343**
 - **2,2013-02-01,2008-04-01,2009-02-01,It's For trade**
 - **3,2018-02-01,2019-05-01,2007-02-01,Like a environment**

这是最高的:

3,2018-02-01,2019-05-01,2007-02-01,Like a environment

我一直在尝试这个:

SELECT 
MAX(Date_Enter),
MAX(Date_Process),
MAX(Date_Shipment),
Description
FROM Reports

但是,不行

CREATE TABLE [dbo].[Reports](
    [ID_RE] [int] IDENTITY(1,1) NOT NULL,
    [Date_Enter] [datetime] NOT NULL,
    [Date_Process] [datetime] NOT NULL,
    [Date_Shipment] [varchar](20),
    [Description] [varchar](20)
 CONSTRAINT [PK_Reports] PRIMARY KEY CLUSTERED 
(
    [ID_RE] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO

这里有一些信息

insert into Reports(Date_Enter,Date_Process,Date_Shipment,Description) values('2012-02-01 02:25:23','2016-02-01 08:45:23','2015-02-01 05:35:23','Send for MX4343')

insert into Reports(Date_Enter,Date_Process,Date_Shipment,Description) values('2013-02-01 01:52:23','2008-04-01 12:45:23','209-02-01 07:35:43','It is For trade')

insert into Reports(Date_Enter,Date_Process,Date_Shipment,Description) values('2018-02-01 04:34:33','2019-05-01 04:35:44','2007-02-01 09:35:09','Like a environment')

【问题讨论】:

  • 最高是在哪一天决定的??你有三个日期
  • 根据您的结果,您只需 select top 1 * from tableName order by ID_RE Desc。根据您的要求按列替换顺序
  • 试试这个?:SELECT ID_RE FROM Reports where Date_Enter=(select MAX(Date_Enter) FROM Reports)
  • 附注 - 正如问题标签所反映的,人们仍在使用 SQL Server 2005,这真的让我感到惊讶。甚至对 SQL Server 2005 的扩展支持也于 16 年 4 月结束,如 here 所述。请考虑使用此软件的一些较新版本以保持最新状态。
  • @PSK 三列 Date_Enter,Date_Process,Date_Shipment

标签: sql sql-server sql-server-2005


【解决方案1】:

问题:

您编写的查询不正确。我建议你阅读 SQL 中的GROUP BY

注意:您的问题数据中有以下两个问题。

1- Date_Shipment 日期不正确,因为 209 不是有效年份 2- [Date_Shipment] 的数据类型是VARCHAR 它应该是DATETIME

insert into Reports(Date_Enter,Date_Process,Date_Shipment,Description) values('2013-02-01 01:52:23','2008-04-01 12:45:23','209-02-01 07:35:43','It is For trade')

解决方案:

如果您想根据所有 3 列查找 MAX 并据此决定,您可以编写如下查询。

SELECT 
 ID_RE,
   (SELECT MAX(MaxDate)
      FROM (VALUES (Date_Enter),(Date_Process),(Date_Shipment)) AS FindMax(MaxDate)) 
   AS MaxDate

  FROM [dbo].[Reports]

如果您想根据 1 个日期列查找MAX,您可以尝试如下。如果Date_Enter 与 2 条或更多条记录相同,则以下查询将返回多条记录。

SELECT * FROM [dbo].[Reports]
WHERE Date_Enter =
(
 SELECT MAX(Date_Enter) FROM [dbo].[Reports]
)

如果您只是想根据 Date_Enter 获取 1 条记录,您可以尝试如下。

SELECT TOP 1 * FROM [dbo].[Reports]
ORDER BY Date_Enter DESC

【讨论】:

    【解决方案2】:

    您可以根据您的要求申请order by,如下所示。如果您希望您的数据获取 Date_Enter 最大的记录,则在该列上应用 order by。如果你想通过multiple order condition获取记录,那么你也可以在多个列上应用顺序。

    仅按 Date_Enter 排序:

    SELECT TOP 1
        ID_RE
        Date_Enter,
        Date_Process,
        Date_Shipment,
        Description
    FROM Reports
    ORDER BY Date_Enter DESC
    

    使用 Date_Enter、Date_Process 和 Date_Shipment 排序:

    SELECT TOP 1
        ID_RE
        Date_Enter,
        Date_Process,
        Date_Shipment,
        Description
    FROM Reports
    ORDER BY Date_Enter DESC, Date_Process DESC, Date_Shipment DESC
    

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多