Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法从每个backday的Datetime列中获取最小和最大时间_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 无法从每个backday的Datetime列中获取最小和最大时间

Sql 无法从每个backday的Datetime列中获取最小和最大时间,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我试图从Datetime InOut列中获取最小和最大时间,但这两列的输出是相同的 我的问题是: SELECT CONVERT(NVARCHAR(12),MIN(Punch_history.Ecode)) as EmpCode, CONVERT(NVARCHAR(12),MIN(EmployeeMaster.RecommandedBy)) as EmpID, convert(date, InOut) as Report_date, CONVERT(VARCHAR(10),(InO

我试图从Datetime InOut列中获取最小和最大时间,但这两列的输出是相同的

我的问题是:

SELECT
  CONVERT(NVARCHAR(12),MIN(Punch_history.Ecode)) as EmpCode,
  CONVERT(NVARCHAR(12),MIN(EmployeeMaster.RecommandedBy)) as EmpID,
  convert(date, InOut) as Report_date,
  CONVERT(VARCHAR(10),(InOut),108) as InTime,
  CONVERT(VARCHAR(10),(InOut),108) as OutTime,
  CONVERT(NVARCHAR(12),MIN(TID)) as LOCATION
  FROM Punch_history inner join EmployeeMaster on Punch_history.ECode = EmployeeMaster.Ecode
  where CAST (InOut as DATE) between  CAST(getdate() -1 as DATE ) and CAST(getdate() -1 as DATE ) and 
  EmployeeMaster.RecommandedBy like 'M0%' group by EmpID,InOut

尝试按转换的日期分组,而不是按inout分组

SELECT
  CONVERT(NVARCHAR(12),MIN(Punch_history.Ecode)) as EmpCode,
  convert(date, InOut) as Report_date,
  CONVERT(NVARCHAR(10),min(InOut),108) as InTime,
  CONVERT(NVARCHAR(10),max(InOut),108) as OutTime
  FROM Punch_history 
  where CAST (InOut as DATE) between  CAST(getdate() -1 as DATE ) 
    and CAST(getdate() -1 as DATE ) 
  group by EmpID, convert(date, InOut)

除了分组问题之外,where子句也很奇怪。首先,在日期计算中使用快捷方式是不可能的。它将以datetime2失败。在两个相同的值之间使用是很奇怪的

SELECT
    CONVERT(NVARCHAR(12), MIN(Punch_history.Ecode)) as EmpCode,
    convert(date, MIN(InOut)) as Report_date,
    CONVERT(NVARCHAR(10), min(InOut), 108) as InTime,
    CONVERT(NVARCHAR(10), max(InOut), 108) as OutTime
FROM Punch_history 
where convert(date, InOut) = convert(date, dateadd(day, -1, getdate()))
group by EmpID
主要的问题是您不应该按InOut datetime分组,这就是为什么结果中的max和min是相同的。实际上,这是取消您希望每天进行的分组

  SELECT
  CONVERT(NVARCHAR(12),MIN(Punch_history.Empcode)) as EmpCode,
  CONVERT(DATE , Max(InOut)) as Report_date,
  CONVERT(NVARCHAR(10),min(InOut),108) as InTime,
  CONVERT(NVARCHAR(10),max(InOut),108) as OutTime
  FROM Punch_history 
  where datediff(day, CAST(InOut as DATE ) , CAST(getdate() as DATE ) )=1
  group  by EmpID
此外,如果empid和empcode在逻辑上是1-1,那么它们应该是 然后,您可以直接使用empcode进行分组,也可以同时使用empcode和empcode进行分组
避免使用这种相当奇怪的Minempcode。

您好,欢迎使用SO。我们需要更多的细节来提供帮助。这是一个很好的起点。这是因为您是按InOut进行分组的,这与您尝试获取最小最大值的…示例输入是一样的???预期输出???当我给group by提供other子句时显示错误,预期输出应该是一天两个不同的时间将另一个表连接到以下数据查询选择CONVERTNVARCAR12,MINPunch_history.Ecode为EmpCode,CONVERTNVARCAR12,MINEmployeeMaster.RecommandBY为EmpID,convertdate,InOut为Report_date,CONVERTVARCHAR10,InOut,108 as InTime,CONVERTVARCHAR10,InOut,108 as OutTime FROM Punch_history内部加入Punch_history上的EmployeeMaster.ECode=EmployeeMaster.ECode,其中InOut as DATE在CASTgetdate-1 as DATE和CASTgetdate-1 as DATE和EmployeeMaster之间转换为DATE。建议使用类似“M0%”的group by convertdate,我很抱歉,它的错误如下。。。Msg 8120,级别16,状态1,第14行列“Punch_history.InOut”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。它已工作,但如果需要从另一个表中添加两个,则会出现错误。.query-select CONVERTNVARCHAR12,MINPunch_history.Ecode as EmpCode,CONVERTNVARCHAR12,MineMemployeeMaster.Recommenday作为EmpID,convertdate,InOut作为报告日期,CONVERTVARCHAR10,InOut,108作为InTime,CONVERTVARCHAR10,InOut,108从Punch_history内部加入Punch_history.ECode=EmployeeMaster.ECode上的EmployeeMaster作为OutTime,其中CASTgetdate-1作为日期与CASTgetdate-1作为日期和EmployeeMaster.Recommanded之间的CastInOut作为日期,如“M0%”按convertdate分组,InOutI认为如果在问题中显示表会更容易获取错误-不允许将数据类型int显式转换为date。