Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

joko

comando DISTINCT

Recommended Posts

SELECT DISTINCT top 100 GameLogonID, GameMoney
   FROM CharGameRecordLg ORDER BY GameMoney DESC;

 

To usando o seguinte comando e ele me retorna os seguintes resultados

 

1315237176-sql-45kb.jpg

 

Então minha duvida ea seguinte como fazer um DISTINCT com GameLogonID e só me informar o maior valor de GameMoney ?

 

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de um distinct, utilize o MAX()

 

declare @dado table (nome varchar(200), valor bigint)




insert into @dado values ('a.jr',1000)

insert into @dado values ('a.jr',2000)

insert into @dado values ('jko',900)




select distinct nome, valor from @dado







select  nome, max(valor) from @dado group by nome




 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas como vou fazer a retrição nesta query?

 

select nome, max(valor) from @dado group by nome

 

Colocar um order by valor desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas como vou fazer a retrição nesta query?

 

select nome, max(valor) from @dado group by nome

 

Colocar um order by valor desc

 

Consegui da seguinte maneira

select top 4 GameLogonID, max(GameLevel) as GameLevel from CharGameRecordLg group by GameLogonID ORDER BY GameLevel DESC

 

só que para terminar a query eu preciso puxar o valor

 

 

select top 4 GameLogonID, CharType, max(GameLevel) as GameLevel from CharGameRecordLg group by GameLogonID ORDER BY GameLevel DESC

 

so que da erro no group, então existe uma maneira na query de por o CharType seme le participar no group?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tem dois Chartype para o msm gamelevel e para o msm gamelogonid, acho que somente por subselect para resolver.

 

Eh o seu caro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você tem dois Chartype para o msm gamelevel e para o msm gamelogonid, acho que somente por subselect para resolver.

 

Eh o seu caro?

 

Tipo na tabela GameLogonID

 

tem as 3 opções

GameLogonID

GameLevel

CharType

 

Para os valores inseridos em CharType existe 8 possiveis dai seria preciso nesta query selecionar o CharType também para poder fazer um Rank

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tipo na tabela GameLogonID

 

tem as 3 opções

GameLogonID

GameLevel

CharType

 

Para os valores inseridos em CharType existe 8 possiveis dai seria preciso nesta query selecionar o CharType também para poder fazer um Rank

 

O seu select eh para rank???

Qual a sua versao do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tipo na tabela GameLogonID

 

tem as 3 opções

GameLogonID

GameLevel

CharType

 

Para os valores inseridos em CharType existe 8 possiveis dai seria preciso nesta query selecionar o CharType também para poder fazer um Rank

 

O seu select eh para rank???

Qual a sua versao do SQL?

 

Abçs

 

sim é para um Rank eu uso sql 2005 e 2008

 

select top 4 GameLogonID, max(GameLevel) as GameLevel, max(CharType) as CharType from CharGameRecordLg where GameLogonID NOT like '%-%' group by GameLogonID ORDER BY GameLevel DESC

 

eu fiz assim funcionou mas o problema que em CharType eu não queria o valor maior mas sim o msm que esta na linha que pegou o max(GameLevel)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos por partes e devagar.

 

Para rank temos algumas funções feitas para isso:

 

Rank()

Dense_Rank()

 

Creio que a função RANK vai ser melhor aplicada por voce.

 

De uma olhada no link e nos exemplos existentes :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta a sintaxe montada.

e o link tah mtoooo lento......

$Query = mssql_query("select  top 10 GameLogonID, max(GameLevel) as GameLevel, max(CharType) as CharType from CharGameRecordLg where  GameLogonID NOT like '%-%' group by GameLogonID  ORDER BY GameLevel DESC");
 for($i=0;$i<mssql_num_rows($Query);$i++) {
 $rank = $i+1;
 $Array = mssql_fetch_row($Query);
@include(@$_GET['php']);
 switch($rank) {
case 1: $rank = "<img src=img/top1.gif width=20px height=20px>"; break;
case 2: $rank = "<img src=img/top2.gif width=20px height=20px>"; break;
case 3: $rank = "<img src=img/top3.gif width=20px height=20px>"; break;
}switch($Array[2]) {
case 4: $Array[2] = "<img src=img/ps.bmp width=15px height=15px>"; break;
case 3: $Array[2] = "<img src=img/as.bmp width=15px height=15px>"; break;
case 1: $Array[2] = "<img src=img/fs.bmp width=15px height=15px>"; break;
case 7: $Array[2] = "<img src=img/mgs.bmp width=15px height=15px>"; break;
case 2: $Array[2] = "<img src=img/ms.bmp width=15px height=15px>"; break;
case 5: $Array[2] = "<img src=img/ata.bmp width=15px height=15px>"; break;
case 6: $Array[2] = "<img src=img/ks.bmp width=15px height=15px>"; break;
case 8: $Array[2] = "<img src=img/sacer.bmp width=15px height=15px>"; break;
}

 

 

 

 

 

No caso a query esta assim

 

$Query = mssql_query("select top 10 GameLogonID, max(GameLevel) as GameLevel, max(CharType) as CharType from CharGameRecordLg where GameLogonID NOT like '%-%' group by GameLogonID ORDER BY GameLevel DESC");

 

eu queria que tivese assim $Query = mssql_query("select top 10 GameLogonID, max(GameLevel) as GameLevel, CharType from CharGameRecordLg where GameLogonID NOT like '%-%' group by GameLogonID ORDER BY GameLevel DESC");

 

Que dai daria o valor atual de CharType mas da erro no Group

E do jeito que eu fiz da o maior valor no CharType.

 

Não sei se você conseguiu me entender

Compartilhar este post


Link para o post
Compartilhar em outros sites

esqueci de perguntar.... qual o resultado esperado??

No seu primeiro print nao tem o campo chartype.....

 

e se você tirar o max do chartype e colocar ele no group by nao resolve????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei sua primeira query para ficar mais facil para você entender

 

declare @dado table (nome varchar(200), valor bigint,CharType bigint)

 

insert into @dado values ('a.jr',1000,2)

insert into @dado values ('a.jr',1001,1)

insert into @dado values ('jko',900,2)

insert into @dado values ('jko',901,1)

 

select nome, max(valor) as valor , CharType from @dado group by nome,CharType

 

dai no casso se usar o valor CharType em group ele não filtra mais pelo nome e minha filtragem teria que ser so pelo nome.

 

declare @dado table (nome varchar(200), valor bigint,CharType bigint)

 

insert into @dado values ('a.jr',1000,2)

insert into @dado values ('a.jr',1001,1)

insert into @dado values ('jko',900,2)

insert into @dado values ('jko',901,1)

 

select nome, max(valor) as valor , max(CharType) as CharType from @dado group by nome

 

mas dai com max no CharType ele filtra so que filtra o valor maior de CharType e eu quero que ele me d eo maior

 

eu quero valor atual envez do maior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao temos um pqno problema ai.

Como que tu sabe o chartype atual do usuario?

 

No seu exemplo temos dois para meu usuario e dois para o seu usuario, como saber qual eh o atual?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao temos um pqno problema ai.

Como que tu sabe o chartype atual do usuario?

 

No seu exemplo temos dois para meu usuario e dois para o seu usuario, como saber qual eh o atual?

O usuario atual eu sei pelo GameLevel mais alto eo CharType atual no caso seria oque foi inserido junto a este valor

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.