Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

запрос на SQL   Найти похожие ветки 

 
Draught   (2005-10-28 17:15) [0]

Доброго времени суток!

В который раз обращаюсь за помощью, т.к. сам не справляюсь...

Есть файл с таблицей в которой записаны люди, их вклады и даты вкладов.
Надо написать запрос результатом которого будут все имена людей, их последний вклад в 2004 году и последний вклад в 2005.

Я смог сделать добиться вот этого:

select name, max(data)
from table1
where data between "2004-01-01" and "2004-12-31"
group by name

union

select name, max(data)
from table1
where data between "2005-01-01" and "2005-12-31"
group by name


как сюда прикрутить вклад???


 
Fay ©   (2005-10-28 17:28) [1]

2 Draught   (28.10.05 17:15)
1) Приведи структуру Table1
2) Зачем NAME в TABLE1 ?


 
ANB ©   (2005-10-28 17:30) [2]

накрутить сверху вложенный запрос с отбором по человеку и дате. Некошерно в такую таблицу класть имена людей.


 
Draught   (2005-10-28 17:40) [3]

Fay, не задавай глупых вопросов...

структура таблицы:
name - имя человека
data - дата вклада
vk - вклад (сумма в рублях)


 
Fay ©   (2005-10-28 17:42) [4]

2 Draught   (28.10.05 17:40) [3]
А primary key какой?!


 
Desdechado ©   (2005-10-28 17:43) [5]

1. UNION поубирает дубликаты, еслиони встретятся в его половинках
2. 2005-12-31 - это 0 часов этой даты. Т.е. те, кто под новый гд сделади вклад, не попадают в твои расчеты

PS хочу такую таблицу с данными по вкладам :)


 
Apachi   (2005-10-28 17:46) [6]

ABN ответ в принципе дал, но Мое мнение таково

Задачу нужно немного изменить
Потому что допустим в один день может быть несколько вкладов, и вот именно в последний день года, откуда потом серверу знать какую именно сумму брать, небходимо добавить уникальный ключь по дате, или добавить время и тоже сделать уникальный ключь дата+время

И полностю согласен с ANB поле NAME однозначно из этой таблицы надо убирать, ставь ссылку на справочник


 
ANB ©   (2005-10-28 17:52) [7]


> Apachi   (28.10.05 17:46) [6]


> сделать уникальный ключь дата+время

Проэктирование таблицы отвратное, задача логически не корректна. Посему ответ на свой вопрос автор получил. А вот делать такие ключи я бы поостерегся. Как раз в нашей рабочей базе такие ключи. Вот граблей то собираем.


 
Draught   (2005-10-28 17:56) [8]

2Fay - ключ как всегда ID - autoincrement

2Desdechado, дубликатов не должно быть... все-таки год разный, за подсказку по дате спасибо... исправлюсь...

по поводу вложенного запроса - хотя бы намекните как это прикрутить...


 
Draught   (2005-10-28 17:58) [9]

структура таблицы может измениться:

ID - key
NAME - уникальный номер человека
DATA - дата вклада (datetime)
VK - сумма


 
Apachi   (2005-10-28 18:02) [10]

2ABN

Клиента потом конечно писать тяжело под такую БД, но зато БД намного прочне :)


 
Fay ©   (2005-10-28 18:02) [11]

2 Draught   (28.10.05 17:58) [9]
Я бы выбрал другие имена полей.
Даже Field2 и Field3 лучше (здесь) чем NAME и DATA


 
stud ©   (2005-10-28 18:13) [12]

select contracts.client_id,  max(contracts.contract_date)
from contracts
group by client_id, substring((convert (varchar(10), contract_date,121)),1,4)
примерный запрос


 
Ольга   (2005-10-28 18:14) [13]


> как сюда прикрутить вклад???

select name, VK, DatePart(yyyy,data) as yyyy, max(data)
from table1
where  DatePart(yyyy,data)=2004 OR DatePart(yyyy,data)=2005
group by name, VK, DatePart(yyyy,data)


 
Draught   (2005-10-28 18:48) [14]

2Fay, какая разница как поля называются??? Если тебе нечего сказать, то лучше промолчать... (без обид)

2stud, в итоге то же самое, что и у меня, только год получен другим способом... при этом вклад так же и остался нетронутым ;)

2Ольга, вариант интересный, но появляется лишняя запись, т.к. группируется по имени и дополнительно по вкладам... :)

В итоге все-таки прикрутил дополнительный вид и все стало на свои места...

create view test
as
select
name as name_user,
max(data) as max_date
from table1
where data between "2004-01-01 00:00:00" and "2004-12-31 23:59:59"
group by name

union

select name, max(data)
from table1
where data between "2005-01-01 00:00:00" and "2005-12-31 23:59:59"
group by name

select table1.* from
table1
 inner join test on table1.name = test.name_user and table1.data = test.max_date


всем спасибо за помощь... если что, обязательно обращусь...


 
stud ©   (2005-10-28 18:50) [15]


> в итоге то же самое, что и у меня, только год получен
> другим способом... при этом вклад так же и остался
> нетронутым ;)

так в чем проблема добавить нужное поле в выборку и группировку???


 
Draught   (2005-10-28 18:58) [16]

2stud
дык добавить нужно было не дату, а вклад... это как бы разные вещи... дату я выбрал, сгруппировал по вкладчикам, оставалось только добавить к этим вкладчикам их вклады...


 
stud ©   (2005-10-28 19:05) [17]

погоди, у тебя есть
клиент, вклад, дата
выбираеш клиент, вклад, мах(дата) -
результат приведенного запроса - с группировкой по годам, клиентам, вкладам


 
Draught   (2005-10-28 19:09) [18]

2stud
если ты говоришь про свой запрос, то это далеко не так.. там даже нет вклада... если ты говоришь о каком-то другом запросе, то показал бы его ;)

Вариант выхода из этой ситуации я нашел всего 1 - создание дополнительного вида, если кто-то предложит другой - с удовольствием рассмотрю...


 
Fay ©   (2005-10-29 13:37) [19]

2 Draught   (28.10.05 18:48) [14]
>> какая разница как поля называются???
Для того, кто будет разбираться с твоей программой после тебя, разница есть.

>> Если тебе нечего сказать, то лучше промолчать... (без обид)
Ну и молчал бы


 
Ольга   (2005-10-29 15:00) [20]


> Вариант выхода из этой ситуации я нашел всего 1 - создание
> дополнительного вида

Вариантов выхода из вашей (простейшей) ситуации несколько. Вы нашли далеко не самый лучший.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.014 c
3-1130782933
ksd
2005-10-31 21:22
2005.12.18
как открыть базу на акцесе из read-only каталога (на CD)?


8-1120681700
ronyn
2005-07-07 00:28
2005.12.18
Как запустить поиск всей музыки на компе для добавления её в Плей


2-1133426018
coral
2005-12-01 11:33
2005.12.18
ADO


6-1125862548
Alpine
2005-09-04 23:35
2005.12.18
Как сохранить страницу загруженную в WebBrowser ?


14-1132750791
ambr
2005-11-23 15:59
2005.12.18
Нужны исходники программы "Осциллограф из компа..."





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский