查询SQL以通过MSSQL获取所有列和最小最大日期时间
我正在使用Microsoft SQL Server。这是我的桌子 添加了示例数据格式文本作为表 我试图获得唯一的生产订单、最小开始日期、开始时间、最大结束日期和结束时间,如查询SQL以通过MSSQL获取所有列和最小最大日期时间,sql,sql-server,tsql,select,unique,Sql,Sql Server,Tsql,Select,Unique,我正在使用Microsoft SQL Server。这是我的桌子 添加了示例数据格式文本作为表 我试图获得唯一的生产订单、最小开始日期、开始时间、最大结束日期和结束时间,如 SELECT [Production order], MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS DATETIME)) AS MIN_DATE_TIME, MAX(CAST([End Date] AS DATETIME) + CAS
SELECT
[Production order], MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS DATETIME)) AS MIN_DATE_TIME, MAX(CAST([End Date] AS DATETIME) + CAST([End Time] AS DATETIME)) AS MAX_DATE_TIME
FROM
TIMEDATA1
WHERE RESOURCE not like 'I-%'
GROUP BY
[Production order]
order by
[Production order] ASC
但是,只有生产订单、最小日期时间、最大日期时间列。我可以质疑。
我试着询问
SELECT
distinct [Production order] ,PN, ProjectID,[Drawing No], MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS DATETIME)) AS MIN_DATE_TIME, MAX(CAST([End Date] AS DATETIME) + CAST([End Time] AS DATETIME)) AS MAX_DATE_TIME
FROM
TIMEDATA1
WHERE RESOURCE not like 'I-%'
GROUP BY
[Production order]
order by
[Production order] ASC
它显示了这样的错误
我希望得到更多的列,如PN、ProjectID、图纸编号
请帮帮我,非常感谢 将第一个结果放入CTE或子查询中,并连接回主表:
;with MinMax as (
SELECT
[Production order], MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS
DATETIME)) AS MIN_DATE_TIME, MAX(CAST([End Date] AS DATETIME) + CAST([End Time] AS
DATETIME)) AS MAX_DATE_TIME
FROM
TIMEDATA1
WHERE RESOURCE not like 'I-%'
GROUP BY
[Production order]
order by
[Production order] ASC
)
SELECT TD.*, MM.Min_Date_Time, MM.Max_Date_Time
FROM TIMEDATA1 TD
INNER JOIN MinMax MM on MM.[Production order] = TD.[Production order]
);以MinMax为例
选择
[Production order],MIN CAST[Start Date]作为DATETIME+CAST[Start Time]作为DATETIME作为MIN_Date_Time,MAXCAST[End Date]作为DATETIME+CAST[End Time]作为DATETIME作为MAX_Date_Time
从…起
时间数据1
其中资源不象'I-%'
分组
[生产订单]
订购人
[生产订单]ASC
选择TD.*、MM.Min\u日期时间、MM.Max\u日期时间
从TIMEDATA1 TD
在MM.[Production order]=TD.[Production order]上将第一个结果放入CTE或子查询中,并连接回主表:
;with MinMax as (
SELECT
[Production order], MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS
DATETIME)) AS MIN_DATE_TIME, MAX(CAST([End Date] AS DATETIME) + CAST([End Time] AS
DATETIME)) AS MAX_DATE_TIME
FROM
TIMEDATA1
WHERE RESOURCE not like 'I-%'
GROUP BY
[Production order]
order by
[Production order] ASC
)
SELECT TD.*, MM.Min_Date_Time, MM.Max_Date_Time
FROM TIMEDATA1 TD
INNER JOIN MinMax MM on MM.[Production order] = TD.[Production order]
通过以下方式在组中包括其他列: 所有非聚合列都应位于GROUP BY中
如果每个生产订单返回多行,那是因为值不同。您需要指定在这种情况下要执行的操作。如果这是一个问题,我建议您提出一个新的问题,提供样本数据、期望的结果,并清楚地解释要做什么。数据应该是文本表而不是图像。您必须在查询中显式选择它们。。。目前,仅选择提及的生产订单、最小日期时间和最大日期时间。将所需的其他内容添加到SELECT子句中。如果你想要唯一的值,你可能想要选择不同的值。数据的图像真的帮不了我们。花时间以可消费的格式发布样本数据;最好是DDL和DML,如果不是,则使用表格格式文本。您通常按照与所选相同的列进行分组,但作为设置函数参数的列除外。在执行分组方式时,您很少需要执行“选择不同”,因为分组方式消除了重复项。@jarlh请清楚地帮助或回答,谢谢!谢谢你的帮助和提示。我问了一个新问题:。请帮忙
SELECT [Production order], PN, ProjectID,[ Drawing No],
MIN( CAST([Start Date] AS DATETIME) + CAST([Start Time] AS DATETIME)) AS MIN_DATE_TIME,
MAX(CAST([End Date] AS DATETIME) + CAST([End Time] AS DATETIME)) AS MAX_DATE_TIME
FROM TIMEDATA1
WHERE RESOURCE not like 'I-%'
GROUP BY [Production order], PN, ProjectID,[ Drawing No]
ORDER BY [Production order] ASC;