【问题标题】:Select Min And Max Value from one table with same id in one row (sql server) [closed]从一行中具有相同 ID 的表中选择最小值和最大值(sql server)[关闭]
【发布时间】:2017-07-31 07:14:20
【问题描述】:

我有这样的表:

| ID |        Date         |
|----|---------------------|
| 20 | 2017-03-01 08:00:00 |
| 20 | 2017-03-01 17:00:00 |
| 21 | 2017-03-01 07:00:00 |
| 21 | 2017-03-01 17:10:00 |

如何选择它以显示如下结果:

| ID |        Date         |        IN          |        OUT         |
|----|---------------------|--------------------|--------------------|
| 20 |      2017-03-01     |2017-03-01 08:00:00 |2017-03-01 17:00:00 |
| 21 |      2017-03-01     |2017-03-01 07:00:00 |2017-03-01 17:10:00 |

我找不到查询,请帮助我,提前谢谢你

【问题讨论】:

  • 感谢您的回复..这就是我所做的:SELECT ID, Datel, (SELECT MIN(Date) FROM Absensi_Log WHERE Date BETWEEN '2017-03-01 00:00:00' AND ' 2017-03-09 23:59:59') AS IN,(SELECT MAX(Date) FROM Absensi_Log WHERE Date BETWEEN '2017-03-03 00:00:00' AND '2017-03-09 23:59:59' ') 来自 Absensi_Log 的日期在“2017-03-03 00:00:00”和“2017-03-09 23:59:59”之间按 ID、日期分组

标签: sql-server max min


【解决方案1】:

以下查询将返回,每个 ID 的最小日期为 IN 时间,最大日期为 OUT 时间。

SELECT  ID,CONVERT(DATE,([DATE]) ) AS [DATE],MIN([DATE]) AS [IN],MAX([DATE]) AS [OUT]
FROM    TABLE1
GROUP BY ID,CONVERT(DATE,([DATE]) )

注意:- 请不要使用 SQL KEYWORD 作为列名(例如;- DATE、IN、OUT...)

【讨论】:

  • 它就像一个魅力!谢谢你的帮助先生!
  • @YohanWijayanto,不要使用 SQL KEYWORD 作为列名(例如;- DATE、IN、OUT...),否则会导致查询出现问题。
  • 感谢您的建议!我会更改关键字。
【解决方案2】:

您可以使用以下查询。

SELECT id, MIN(date), MAX(date) FROM yourTable GROUP BY id

【讨论】:

    【解决方案3】:
    CREATE TABLE #TEMP (Id INT,[Date] DATETIME)
    INSERT INTO #Temp 
    SELECT 20,'2017-03-01 08:00:00' UNION ALL
    SELECT 20,'2017-03-01 17:00:00' UNION ALL
    SELECT 21,'2017-03-01 07:00:00' UNION ALL
    SELECT 21,'2017-03-01 17:10:00'
    
    SELECT Id,CONVERT(DATE,[Date],103)[Date],Min([Date]) DateIN,Max([Date]) DateOUT FROM #Temp
    GROUP BY Id,CONVERT(DATE,[Date],103)
    
    DROP TABLE #Temp
    

    【讨论】:

      【解决方案4】:

      试试这个:聚合函数 MIN,MAXGROUP BY 将解决您的问题并为您提供预期的结果,如下所示:

      select id, cast(Edate as Date) EDate, min(Edate) inTime, max(Edate) outTime 
      from myTable
      group by id, cast(Edate as Date)
      

      输出

      id  EDate       inTime                  outTime
      20  2017-03-01  2017-03-01 08:00:00.000 2017-03-01 17:00:00.000
      21  2017-03-01  2017-03-01 07:00:00.000 2017-03-01 17:10:00.000
      

      【讨论】:

      • 感谢您的出色回答!如果没有您的帮助,我无法弄清楚。谢谢!
      【解决方案5】:

      请尝试以下查询。

      SELECT
        ID,
        to_char(DATE, 'yyyy-mm-dd'),
        MIN(DATE) AS IN,
        MAX(DATE) AS OUT
      FROM Absensi_Log outer
      GROUP BY ID,to_char(DATE, 'yyyy-mm-dd')
      

      带子查询

      SELECT
        ID,
        (SELECT
          to_char(DATE, 'yyyy-mm-dd')
        FROM Absensi_Log sub
        WHERE sub.id = outer.id
        GROUP BY to_char(DATE, 'yyyy-mm-dd')),
        MIN(DATE) AS IN,
        MAX(DATE) AS OUT
      FROM Absensi_Log outer
      GROUP BY ID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 1970-01-01
        • 2017-12-17
        相关资源
        最近更新 更多