繁体   English   中英

我可以在 sql 中执行此操作吗?

[英]Can I do this in sql?

我试图让**ID_RE**在最高列**Date_Enter,Date_Process,Date_Shipment**

例如,这里有一个三行。

 - **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')

您可以根据您的要求申请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

问题:

您编写的查询不正确。 我建议你在 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 ,您可以尝试如下。 如果 2 条或多条记录的Date_Enter相同,则以下查询将返回多条记录。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM