2017-03-10 41 views
1

我的表是这样的:从同一ID只能有一个表中的一行(SQL Server)的选择MIN和MAX值

| 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 | 

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

+0

你尝试过这么远吗? –

+0

感谢您的回复。这就是我所做的:SELECT ID,Datel,(SELECT MIN(Date)FROM Absensi_Log WHERE Date BETWEEN'2017-03-01 00:00:00'AND'2017-03-09 23: ')AS IN,(SELECT MAX(Date)FROM Absensi_Log WHERE Date Date'2017-03-03 00:00:00'AND'2017-03-09 23:59:59')从Absensi_Log出来WHERE日期BETWEEN'2017-03-03 00:00:00'和'2017-03-09 23:59:59'GROUP BY ID,日期 –

回答

2

您可以使用下面的查询。

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

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

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

注: - 请不要使用SQL关键字作为列名(例如; - DATE,IN,OUT ...)

+0

它的作用像一个魅力!谢谢你的帮助先生! –

+0

@YohanWijayanto,不要使用SQL KEYWORD作为列名(例如: - DATE,IN,OUT ...),这会在查询中导致问题。 –

+0

谢谢您的建议!,我会更改关键字。 –

0

试试这个:聚合函数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 
+0

谢谢你的伟大的答案!,我不明白没有你的帮助。谢谢! –

0

请尝试以下查询。

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 
0
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 
相关问题