|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Valentine Zaretsky 2:464/36 03 May 2001 16:29:27 To : All Subject : Re: PostgreSQL v6.5.2, -------------------------------------------------------------------------------- .MSGID: research.apex.dp.ua d522772e .REPLY: ddt.demos.su a47abbf0 .REPLYADDR: valik@research.apex.dp.ua .REPLYTO: 2:464/36@fidonet UUCP .RFC-Message-ID: <3AF15D37.F99A0603@research.apex.dp.ua> .RFC-References: <1146138475@p3.f75.n5002.z2.fidonet> <9cr9c2$qsa$1@ddt.demos.su> .RFC-Reply-To: valik@apex.dp.ua .RFC-X-Accept-Language: en From: Valentine Zaretsky <valik@research.apex.dp.ua> Subject: Re: PostgreSQL v6.5.2, =?koi8-r?Q?=CD=CF=D6=CE=CF=20=CC=C9=20=D2=C5=C1=CC=C9=DA=CF=D7=C1=D4=D8=2E=2E= 2E?= bucicov@carmez.mldnet.com wrote: > From: "Bucicov Anatolie" <bucicov@carmez.mldnet.com> > > Ivan Shmakov <Ivan.Shmakov@p3.f75.n5002.z2.fidonet.org> сообщил в новостях > следующее:1146138475@p3.f75.n5002.z2.fidonet.ftn... > > > > Допустим есть база данных mybase, в ней есть таблица mytable, в > > ней -- три поля: символьное name, числовое value и time типа > > datetime. Можно ли средствами языка SQL сабжевой базы данных > > реализовать запрос, по которому бы для всевозможных имеющихся > > значений name выдавалось значение поля value той записи, которая > > имеет наиболее "новое" значение time? То есть, например, есть > > такие записи: > > name | value | time > > --------+-------+--------------------- > > test1 | 10000 | Apr 20 10:00:01 2001 > > test2 | 20000 | Apr 21 15:31:44 2001 > > test3 | 15000 | Apr 21 17:23:31 2001 > > test3 | 13000 | Apr 22 10:21:15 2001 > > test2 | 17500 | Apr 22 13:05:53 2001 > > По запросу получаем: > > name | value | time > > --------+-------+--------------------- > > test1 | 10000 | Apr 20 10:00:01 2001 > > test2 | 17500 | Apr 22 13:05:53 2001 > > test3 | 13000 | Apr 22 10:21:15 2001 > > > > Кроме того, если это не реализуемо сабжевой версией, но более > > новые это умеют, тогда хотелось бы знать, с какой версии это > > возможно. > > > > p.s. А если надо получить тоже самое, только time не просто наиболее > > "новое", но, кроме того, меньше некоторого наперёд заданного? > > -- > > Sincerely yours Death. > > Создал быстренько себе табличку: > > create table (id integer, value integer, dt date) > > и наляпал тебе 2 простеньких запроса (черт.. оба работают.. прикинь..) > > 1) > select p.id, p.value > from exp p > where dt = (select max(s.dt) from exp s where s.id=p.id) > > 2) > select p.id, p.value > from Exp p inner join > (select id, max(dt) from exp group by id) as s (id, dt) on (p.id = s. > ID and p.dt = s.dt) Применительно к postgresql можно гораздо проще сделать: select value from mytable where time<=some_time_limit order by time desc limit 1 WBR, Valentine Zaretsky --- Mozilla 4.72 [en] (X11; U; Linux 2.2.14-12bc i686) * Origin: Trifle ISP, Dnepropetrovsk, Ukraine (2:464/36@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/1265288501.html, оценка из 5, голосов 10
|