Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-1079166634
anatolyk
2004-03-13 11:30
2004.04.11
Ширина колонки в DBGRIDEH (...EH!)


1-1082660847
Боян Георгиев
2004-04-22 23:07
2004.04.11
Курсор


3-1079102146
student
2004-03-12 17:35
2004.04.11
ошибка БДЕ 210С


1-1079713013
Nikk
2004-03-19 19:16
2004.04.11
Программный вызов почтового клиента


9-1065213319
Sword-Fish
2003-10-04 00:35
2004.04.11
Проверка столкновений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский