Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
3-1079095213
stud
2004-03-12 15:40
2004.04.11
непонятно с пользователями


6-1079643480
pirat
2004-03-18 23:58
2004.04.11
как насильно завершить соединения TIdTCPServer


3-1081526271
lockheed_man
2004-04-09 19:57
2004.04.11
Изменение данных в DBGrid


3-1082016968
BAYES
2004-04-15 12:16
2004.04.11
select * from prod order by no


3-1081004186
RayRom
2004-04-03 18:56
2004.04.11
’’ is not a valid integer value





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