Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Агрегация и подзапрос  [new]
mr_rocco
Member

Откуда:
Сообщений: 1
Доброго времени суток.

Нужен совет:
Есть таблица, в которой отмечаются пациенты и их визиты в больницу.
Один пациент может прийти несколько раз.
Требуется подсчитать количество первичных визитов пациентов с травмой за этот год.

Пытался сделать это так, но безуспешно.
select COUNT(DATA_DIAGNOSIS.DATE_CONSULTATION), DATA_DIAGNOSIS.TRAVMA
            from DATA_DIAGNOSIS
		group by DATA_DIAGNOSIS.TRAVMA
			having MIN(year(DATA_DIAGNOSIS.DATE_CONSULTATION)) = YEAR(GETDATE())


Т.е. запрос возвращает все визиты пациентов, пришедших впервые в этом году.

А выражения типа
select COUNT(MIN(DATA_DIAGNOSIS.DATE_CONSULTATION))
естественно не прокатывают.

Что все таки стоит с этим сделать?
25 дек 13, 11:39    [15344192]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ну так и считайте в разрезе поциент : count(distinct DATA_DIAGNOSIS.TRAVMA)

текущий год DATA_DIAGNOSIS.DATE_CONSULTATION >=dateadd(year,datediff(year, 0,GETDATE()),0)
and DATA_DIAGNOSIS.DATE_CONSULTATION <dateadd(year,1+datediff(year, 0,GETDATE()),0)
25 дек 13, 11:50    [15344268]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
cherox
Member

Откуда: Новосибирск
Сообщений: 97
так?
select 
	TRAVMA
	,count( distinct PATIENTS_ID)
from DATA_DIAGNOSIS
where dateadd(year, datediff(year, 0, getdate()), 0) <= DATE_CONSULTATION
	and DATE_CONSULTATION < dateadd(year, 1 + datediff(year, 0, getdate()), 0)
group by TRAVMA
25 дек 13, 12:08    [15344406]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Вы же хотите посчитать сколько первичных обращений(по сути TRAVMA) было у пациента? Лучше вас никто вашу БД не знает, я только могу подсказать общие моменты. Если я прав насчет TRAVMA, тогда так:
select 
	PATIENTS_ID
	,count( distinct TRAVMA)
from DATA_DIAGNOSIS
where dateadd(year, datediff(year, 0, getdate()), 0)<= DATE_CONSULTATION
	and DATE_CONSULTATION < dateadd(year, 1 + datediff(year, 0, getdate()), 0)
group by PATIENTS_ID
25 дек 13, 12:23    [15344509]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
Добрый Э - Эх
Guest
mr_rocco,

похоже, тебе сюда...
25 дек 13, 12:48    [15344681]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
Мистер Хенки
ну так и считайте в разрезе поциент : count(distinct DATA_DIAGNOSIS.TRAVMA)

текущий год DATA_DIAGNOSIS.DATE_CONSULTATION >=dateadd(year,datediff(year, 0,GETDATE()),0)
and DATA_DIAGNOSIS.DATE_CONSULTATION <dateadd(year,1+datediff(year, 0,GETDATE()),0)


текущий год
datepat(yy,DATA_DIAGNOSIS.DATE_CONSULTATION ) = datepat(yy,GETDATE())
25 дек 13, 13:25    [15345015]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
StarikNavy,

datepaRt(yy,DATA_DIAGNOSIS.DATE_CONSULTATION ) = datepart(yy,GETDATE())
25 дек 13, 13:26    [15345026]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
StarikNavy
Мистер Хенки
ну так и считайте в разрезе поциент : count(distinct DATA_DIAGNOSIS.TRAVMA)

текущий год DATA_DIAGNOSIS.DATE_CONSULTATION >=dateadd(year,datediff(year, 0,GETDATE()),0)
and DATA_DIAGNOSIS.DATE_CONSULTATION <dateadd(year,1+datediff(year, 0,GETDATE()),0)


текущий год
datepat(yy,DATA_DIAGNOSIS.DATE_CONSULTATION ) = datepat(yy,GETDATE())

это не SARG предикат. Говнокод, короче.
25 дек 13, 13:29    [15345053]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
cherox
Member

Откуда: Новосибирск
Сообщений: 97
Мистер Хенки
Вы же хотите посчитать сколько первичных обращений(по сути TRAVMA) было у пациента? Лучше вас никто вашу БД не знает, я только могу подсказать общие моменты. Если я прав насчет TRAVMA, тогда так:

Я не mr_rocco :) и моё сообщение было ему..
26 дек 13, 06:30    [15348151]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
Jaffar
Member

Откуда:
Сообщений: 633
mr_rocco,


если хотите чтобы вам помогли - давайте структуру участвующих таблиц(в виде полей) и описание ключевых полей.
не ясно что является признаком первичности обращения.
есть наверное отдельная таблица пациентов
и таблица визитов.
26 дек 13, 08:35    [15348277]     Ответить | Цитировать Сообщить модератору
 Re: Агрегация и подзапрос  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
Мистер Хенки
это не SARG предикат. .

действительно. был не прав, вспылил.
26 дек 13, 10:08    [15348496]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить