Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизSQL-запросик Найти похожие ветки
← →
Sir Kik © (2004-03-09 18:28) [0]Задачка: дана таблица (id, date, time, id_user). Заносятся записи входов в базу юзверей-когда и во сколько. Вопрос: требуется найти для каждого юзверя id последнего входа (именно id, а не число, время). В день м.б. и несколько входов.
← →
Соловьев © (2004-03-09 18:31) [1]select id_user, max(id)
from table
group by id_user
← →
ZrenBy © (2004-03-09 18:40) [2]select
id_user,
id_fmax=substring(max(convert(char(23),date+time,120)+convert(char(10),id)),24,10)
from table group by id_user
← →
Fay © (2004-03-10 07:59) [3]2ZrenBy © (09.03.04 18:40) [2]
IB не очень хорошо поддерживает T-SQL. 8)
← →
Johnmen © (2004-03-10 09:16) [4]Это зависит от определения "последнего входа"
← →
Жук © (2004-03-10 09:27) [5]
> Johnmen © (10.03.04 09:16) [4]
> Это зависит от определения "последнего входа"
Главное, чтобы юзверь вошёл, а уж последним его вход мы сами сделаем :-)
← →
ZrenBy © (2004-03-10 09:57) [6]>>Fay © (10.03.04 07:59) [3]
Дан прынцып
← →
Fay © (2004-03-10 10:03) [7]А чё за прынцып такой - искать max по строке?
← →
ZrenBy © (2004-03-10 10:07) [8]>>искать max по строке?
Это уже офф.
Еще раз. Дан прынцып.
Не нравится строка - ищите по чему-нибудь другому,
это не прынцыпиально :)
← →
Sir Kik © (2004-03-10 17:05) [9]В IB выглядит так:
select
id_user,
CAST((copy(max(CAST(date + time AS VARCHAR(24)) || CAST(id AS VARCHAR(10))), 25, 10)) AS int) AS XXX
from table YYY group by id_user
где copy - собственная ф-ция dll, бо плохо у IB со строками
Принцип ZrenBy здесь полностью проходит. Особая ему благодарность.
← →
Johnmen © (2004-03-10 17:21) [10]Можно ещё штаны через голову снимать...:) Но это чудачество, как минимум...
SELECT T1.id, T1.date, T1.time, T1.id_user
FROM Table T1
WHERE T1.date+T1.time=(SELECT MAX(T2.date+T2.time)
FROM Table T2
WHERE T1.id_user=T2.id_user)
← →
ZrenBy © (2004-03-11 11:43) [11]Так.
Попробовал штаны снять через голову, вот что получилось.
set nocount on
use pubs
go
if(object_id("t") is not null)drop table t
create table t(id int identity(1,1),date datetime,time datetime,id_user char(1))
go
insert into t(date,time,id_user)
select
dateadd(dd,N+error+ascii(description),"18000101"),
dateadd(ss,floor(rand()*80000),"00:00:00"),
substring(description,1,1)
from master..sysmessages join (
select N=100*C+10*B+A from
(select A=0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9)a,
(select B=0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9)b,
(select C=0 union select 1 union select 2 union select 3)c
)Q on 1=1
go
declare @J datetime set @J=getdate()
select T1.id_user,T1.id
from t T1
where T1.date+T1.time=(select max(T2.date+T2.time)
from t T2
where T1.id_user=T2.id_user)
print "Johnmen:" print datediff(ms,@J,getdate())
go
declare @Z datetime set @Z=getdate()
select
id_user,
id_fmax=convert(int,substring(max(convert(binary(8),date+time)+convert(binary(4),id)),9,4))
from t group by id_user
print "ZrenBy:" print datediff(ms,@Z,getdate())
go
PS:
Все, что можно сказать по этому поводу, я прекрасно знаю.
Это чудачества у меня такие :)
← →
Johnmen © (2004-03-11 12:00) [12]>ZrenBy © (11.03.04 11:43) [11]
Просто я забыл указать, что мой пост предназначен автору, а не тебе...:)
А если ты намекаешь на время выполнения, то можно развернуть целую философскую дискуссию на эту тему,на тему извращенческих конструкций, на тему переносимости кода, на тему стандартности и универсальности и т.п.
Но не стОит, право...:)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.052 c