2016-10-04 6 views
0

В принципе мне нужен запрос sql, который будет возвращать отдельные значения для 1 столбца, а затем обрезать результаты (DateTime), чтобы показывать только дату. И мои другие столбцы должны иметь счет предметов с этого дня.sql получить отдельный и обрезать один столбец при подсчете количества значений в другом столбце

Я попытался ниже:

Select LoggedDate as Date, count(ID) as Amount from Tickets WHERE LoggedDate >=dateadd(day,datediff(day,0,GetDate())- 30,0) AND State = '1' group by LoggedDate 

ID | Date     | Amount 
---------------------------------------- 
1 | 2016-09-23 11:54:12.000 | 1 
2 | 2016-09-29 09:23:58.000 | 1 
3 | 2016-09-29 09:34:07.000 | 1 
4 | 2016-09-29 09:41:12.000 | 1 
5 | 2016-09-29 09:53:37.000 | 1 
6 | 2016-09-29 09:57:17.000 | 1 
7 | 2016-09-29 10:01:53.000 | 1 
8 | 2016-10-03 21:10:27.000 | 1 
9 | 2016-10-04 03:20:51.000 | 1 
10 | 2016-10-04 03:47:34.000 | 1 
11 | 2016-10-04 03:50:09.000 | 1 

Я пытался что-то вроде:

Select DISTINCT(LEFT(LoggedDate, 11)) AS Date, count(ID) as Amount from Tickets WHERE LoggedDate >=dateadd(day,datediff(day,0,GetDate())- 30,0) AND State = '1' group by LoggedDate 

ID | Date  | Amount 
---------------------------- 
1 | OCT 3 2016 |1 
2 | OCT 2 2016 |1 
3 | SEP 22 2016 |1 
4 | SEP 23 2016 |1 
5 | SEP 29 2016 |1 

Я хочу ниже, но не уверен, как получить мои данные так:

ID | Date  | Amount 
--------------------------- 
1 | 2016-09-23 |1 
2 | 2016-09-29 |5 
3 | 2016-10-03 |1 
4 | 2016-10-03 |1 
5 | 2016-10-04 |2 

ответ

0

Try с ниже сценария.

SELECT ROW_NUMBER() OVER (ORDER BY (select 1)) AS id 
     ,CAST(LoggedDate as date) AS Date 
     , count(ID) as Amount 
FROM Tickets 
WHERE LoggedDate >=dateadd(day,datediff(day,0,GetDate())- 30,0) AND State = '1' 
GROUP BY CAST(LoggedDate as date) 
0

Если я исправлю это, вы можете попробовать следующее:

SELECT ROW_NUMBER() Over(ORDER BY Date) [Id], * 
FROM 
(
    SELECT CONVERT(VARCHAR(35), LoggedDate, 106) [Date], SUM(Amount) [Total] 
    FROM Tickets 
    GROUP BY CONVERT(VARCHAR(35), LoggedDate, 106) 
) a 

Вы можете поэкспериментировать с форматом даты, изменяя третий параметр в функции CONVERT.

Вам также нужно ставить какие-либо условия и т.д.

0

Я думаю, что вам нужно что-то вроде этого:

SELECT DATE(LoggedDate) AS date, COUNT(id) AS Amount 
FROM Tickets 
WHERE state = 1 
GROUP BY DATE(LoggedDate); 
0

Я просто угадывая вашей структуры таблицы, но вот пример кода, который я поставил вместе:

DECLARE @t TABLE (id INT, loggedDate DATETIME) 

INSERT INTO @t (id, loggedDate) VALUES (1, '2016-09-23 11:54:12.000') 
INSERT INTO @t (id, loggedDate) VALUES (2, '2016-09-29 09:23:58.000') 
INSERT INTO @t (id, loggedDate) VALUES (3, '2016-09-29 09:34:07.000') 
INSERT INTO @t (id, loggedDate) VALUES (4, '2016-09-29 09:41:12.000') 
INSERT INTO @t (id, loggedDate) VALUES (5, '2016-09-29 09:53:37.000') 
INSERT INTO @t (id, loggedDate) VALUES (6, '2016-09-29 09:57:17.000') 
INSERT INTO @t (id, loggedDate) VALUES (7, '2016-09-29 10:01:53.000') 
INSERT INTO @t (id, loggedDate) VALUES (8, '2016-10-03 21:10:27.000') 
INSERT INTO @t (id, loggedDate) VALUES (9, '2016-10-04 03:20:51.000') 
INSERT INTO @t (id, loggedDate) VALUES (10, '2016-10-04 03:47:34.000') 
INSERT INTO @t (id, loggedDate) VALUES (11, '2016-10-04 03:50:09.000') 




SELECT ROW_NUMBER() OVER (ORDER BY CONVERT(DATE,loggedDate)) AS id, CONVERT(DATE, loggedDate) AS loggedDate, COUNT(1) AS amount 
FROM @t 
GROUP BY CONVERT(DATE,loggedDate) 

/* output 
id loggedDate amount 
1 2016-09-23 1 
2 2016-09-29 6 
3 2016-10-03 1 
4 2016-10-04 3 
*/