una tabla repiten repetidos registros rango numero generar fechas distintos cuantos contar condicion agrupados sql sql-server count

sql - repiten - Cómo contar filas desde una tabla diferente basada en el mismo rango de fechas



sql contar registros condicion (1)

SELECT --ps.USER_NAME as USER_NAME, s.user_name, count(distinct c.comment_id) as comments, count(s.picture_stats_id) as pics --COUNT(*) as PICTURE_COUNT, --SUM(1) AS COMMENT_COUNT from --commenting.transcription_audit_stats pcs -- RIGHT OUTER JOIN commenting.transcription_stats ps ON ps.SURVEY_STATS_ID --= pcs.SURVEY_STATS_ID picture_stats s left join picture_comment_stats c on s.picture_stats_id = c.picture_stats_id and s.date_time = c.date_time where s.date_time between --specified date range --WHERE ps.DATE_TIME BETWEEN @beginFilterDate AND @endFilterDate --GROUP BY ps.USER_NAME --ORDER BY ps.USER_NAME group by s.user_name,s.date_time

Pruebe esto y obtenga el nombre de usuario de la tabla de búsqueda que tiene. También filtra las fechas que necesitas.

EDITAR Aunque la respuesta aceptada no coincide con lo que estaba buscando en el momento en que escribí esta pregunta, muestra una mejor manera de lo que ya tenía (que es lo que quieren) los datos en las tablas de producción son lo que está mal , lo que significa que los números son incorrectos

Estoy luchando por crear la declaración sql para crear el informe en la parte inferior de esta publicación. He incluido las declaraciones para crear mis tablas y datos de prueba. Para comenzar, aquí está la declaración de creación para picture_stats

CREATE TABLE [picture_stats]( [PICTURE_STATS_ID] [int] NULL, [USER_NAME] [varchar](30) NULL, [DATE_TIME] [datetime] NULL, [SIZE] [float] NULL, [CLICK_COUNT] [int] NULL ) ON [PRIMARY] GO

Insertar declaración que pone los datos en picture_stats

INSERT INTO [picture_stats] ([PICTURE_STATS_ID] ,[USER_NAME] ,[DATE_TIME] ,[SIZE] ,[CLICK_COUNT]) VALUES (1 ,''A'',''2015-05-18''75,18), (2 ,''A'',''2015-05-18''13,18), (3 ,''A'',''2015-05-18''42,16), (4 ,''A'',''2015-05-18''59,16), (5 ,''A'',''2015-05-18''46,14), (6 ,''A'',''2015-05-18''64,16), (7 ,''A'',''2015-05-18''87,13), (8 ,''A'',''2015-05-18''84,14), (9 ,''A'',''2015-05-18''33,16), (10,''A'',''2015-05-18''59,14), (11,''B'',''2015-05-19''10,17), (12,''B'',''2015-05-19''44,18), (13,''B'',''2015-05-19''29,14), (14,''B'',''2015-05-19''65,19), (15,''B'',''2015-05-19''10,15), (16,''B'',''2015-05-19''55,18), (17,''B'',''2015-05-19''81,11), (18,''B'',''2015-05-19''29,11), (19,''B'',''2015-05-19''58,19), (20,''B'',''2015-05-19''20,17), (21,''C'',''2015-05-20''35,16), (22,''C'',''2015-05-20''70,18), (23,''C'',''2015-05-20''30,13), (24,''C'',''2015-05-20''33,13), (25,''C'',''2015-05-20''43,19), (26,''C'',''2015-05-20''10,15), (27,''C'',''2015-05-20''33,13), (28,''C'',''2015-05-20''23,12), (29,''C'',''2015-05-20''35,18), (30,''C'',''2015-05-20''58,19) GO

Vista de tabla de los datos.

ID USER_NAME DATE_TIME SIZE CLICK_COUNT -- --------- ---------- ---- ----------- 1 A 2015-05-18 75 18 2 A 2015-05-18 1 18 3 A 2015-05-18 42 16 4 A 2015-05-18 59 16 5 A 2015-05-18 46 14 6 A 2015-05-18 64 16 7 A 2015-05-18 87 13 8 A 2015-05-18 84 14 9 A 2015-05-18 33 16 10 A 2015-05-18 59 14 11 B 2015-05-19 10 17 12 B 2015-05-19 44 18 13 B 2015-05-19 29 14 14 B 2015-05-19 65 19 15 B 2015-05-19 100 15 16 B 2015-05-19 55 18 17 B 2015-05-19 81 11 18 B 2015-05-19 29 11 19 B 2015-05-19 58 19 20 B 2015-05-19 20 17 21 C 2015-05-20 35 16 22 C 2015-05-20 7 18 23 C 2015-05-20 30 13 24 C 2015-05-20 33 13 25 C 2015-05-20 4 19 26 C 2015-05-20 100 15 27 C 2015-05-20 33 13 28 C 2015-05-20 23 12 29 C 2015-05-20 35 18 30 C 2015-05-20 58 19

La segunda tabla picture_comment_stats se puede crear con esto:

CREATE TABLE [picture_comment_stats]( [PICTURE_STATS_ID] [int] NULL, [USER_NAME] [varchar](30) NULL, [DATE_TIME] [datetime] NULL, [CLICK_COUNT] [int] NULL, [LIKES] [int] NULL, ) ON [PRIMARY] GO

Para script en los datos:

INSERT INTO [picture_comment_stats] ([PICTURE_STATS_ID] ,[USER_NAME] ,[DATE_TIME] ,[CLICK_COUNT] ,[LIKES]) VALUES (1 ,''X'',''2015-05-18'',75,18), (2 ,''X'',''2015-05-18'',1 ,18), (3 ,''X'',''2015-05-18'',42,16), (4 ,''X'',''2015-05-18'',59,16), (9 ,''X'',''2015-05-19'',34,16), (10,''X'',''2015-05-19'',57,14), (11,''Y'',''2015-05-19'',11,17), (12,''Y'',''2015-05-19'',44,18), (17,''Y'',''2015-05-20'',81,11), (18,''Y'',''2015-05-20'',29,11), (19,''Y'',''2015-05-20'',55,19), (21,''Z'',''2015-05-20'',45,16), (20,''Y'',''2015-05-21'',20,17), (22,''Z'',''2015-05-21'',7 ,18), (23,''Z'',''2015-05-21'',30,13), (24,''Z'',''2015-05-21'',39,13), (25,''Z'',''2015-05-21'',4 ,19), (26,''Z'',''2015-05-21'',10,15), (27,''Z'',''2015-05-21'',33,13), (28,''Z'',''2015-05-21'',23,12), (29,''Z'',''2015-05-21'',35,18), (30,''Z'',''2015-05-21'',58,19) GO

La mesa debería verse así.

ID USER_NAME DATE_TIME COMMENT_ID LIKES -- --------- ---------- ---------- ----- 1 X 2015-05-18 75 18 2 X 2015-05-18 1 18 3 X 2015-05-18 42 16 4 X 2015-05-18 59 16 9 X 2015-05-19 34 16 10 X 2015-05-19 57 14 11 Y 2015-05-19 11 17 12 Y 2015-05-19 44 18 17 Y 2015-05-20 81 11 18 Y 2015-05-20 29 11 19 Y 2015-05-20 55 19 21 Z 2015-05-20 45 16 20 Y 2015-05-21 20 17 22 Z 2015-05-21 7 18 23 Z 2015-05-21 30 13 24 Z 2015-05-21 39 13 25 Z 2015-05-21 4 19 26 Z 2015-05-21 10 15 27 Z 2015-05-21 33 13 28 Z 2015-05-21 23 12 29 Z 2015-05-21 35 18 30 Z 2015-05-21 58 19

Lo que quiero hacer es hacer un informe de los datos de manera que tenga el nombre de usuario, el recuento de las imágenes y el recuento de comentarios en una imagen individual. El picture_stats_id en ambas tablas es en realidad una clave externa que apunta a la tabla ''pictures'' clave principal picture_id. El informe Quiero poder elegir una fecha o un rango de fechas y hacer que se muestre así: Espero que el informe muestre lo siguiente para los diferentes escenarios de 3 días

(Filtered for Date:2015-05-18) USER_NAME PICS COMMENTS --------- ---- -------- A 10 4 (Filtered for Date:2015-05-19) USER_NAME PICS COMMENTS --------- ---- -------- B 10 2 (Filtered for Date:2015-05-20) USER_NAME PICS COMMENTS --------- ---- -------- C 10 1 (Filtered for Date:2015-05-18 to 2015-05-19) USER_NAME PICS COMMENTS --------- ---- -------- A 10 6 B 10 2 (Filtered for Date:2015-05-19 to 2015-05-20) USER_NAME PICS COMMENTS --------- ---- -------- B 10 2 C 10 1 (Filtered for Date:2015-05-18 to 2015-05-20) USER_NAME PICS COMMENTS --------- ---- -------- A 10 6 B 10 5 C 10 1

Hasta ahora todo lo que tengo es

SELECT ps.USER_NAME as USER_NAME, COUNT(*) as PICTURE_COUNT, SUM(1) AS COMMENT_COUNT -- can''t figure out this statement for nothing. from picture_comment_stats pcs RIGHT OUTER JOIN picture_stats ps ON ps.PICTURE_STATS_ID = pcs.PICTURE_STATS_ID --WHERE ps.DATE_TIME BETWEEN @beginFilterDate AND @endFilterDate GROUP BY ps.USER_NAME ORDER BY ps.USER_NAME

EDITAR

La dirección del violín como se dio en los comentarios a continuación: http://sqlfiddle.com/#!3/74e77

Para aclarar los recuentos que trato de obtener. La segunda columna sería la cantidad de imágenes que dicho usuario publicó ese día. la tercera columna es cuántos comentarios se hicieron SOLAMENTE en una imagen de usuario para ese día especificado. Así que aunque X comentó la imagen de A un total de 6 veces (el 18 y el 19), solo quiero contar 4 si filmo para el 18 y 6 si filmo el 18 al 19. Es un poco difícil de seguir, estoy seguro, pero eso es lo que se quiere.