Fazer query por Semanas [Resolvido]

Boa tarde Senhores,

Estou com um sistema que o cliente quer os relatórios dos dados semanais, porém, a semana deles começa na quarta-feira e termina na terça-feira da outra semana. Exemplo:

Semana 1: Quarta-feira:04/01/17 a terça-feira:10/01/17

Semana 2: Quarta-feira:11/01/17 a terça-feira:17/01/17

Semana 3: Quarta-feira:18/01/17 a terça-feira:24/01/17

e assim sucessivamente totalizando 52 semanas.

Como fazer um filtro chamando todas essas semanas?

Fala Daniel,

Precisa ser fixo mesmo? Não seria melhor o cliente escolher o período?

Se não tiver jeito, penso que montar um array com os períodos seria uma saída. Outra saída também seria criar uma tabela com os períodos (52) e assim eles poderiam ser modificados pelo cliente. Aí você pegaria esses campos pra fazer os filtros que desejas.

Fala Kleyber,

No caso seria fixo mesmo. Gostaria de um filtro com as 52 semanas, ao escolher uma semana viria com os dados daquela respectiva semana, também mostrando a data. Por ex: SEMANA 27 - PERÍODO DE 05/07/2017 A 11/07/2017.

1 - Como seria essa query?

2 - Ao mudar o ano muda a regra? porque esse ano quarta feira foi dia 4 e em 2018 quarta-feira vai ser dia 3

1 - Não seria uma query e sim criar um array em um evento para popular com datas.

2 - Como a tabela seria populada manualmente, basta colocar o ano e vai cadastrando os períodos que quiser, ano a ano.

Tenho 2 tabelas: Células e Frequencia. Estou fazendo todas as consultas na tabela celulas, onde criei um campo virtual para pegar a semana daquela celula na tabela frequencia.

Criei uma aplicação controle para filtrar, criei 2 campos para filtrar por celula e semana. Criei uma variável global [var_semana]={semana};

Na consulta celula criei um where dinâmico:

if (!empty([var_semana])):
sc_select_where(add) = “where Data = [var_semana]”;
endif;

No entanto aparece o erro:

tenção
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘where Data = 34’ at line 1
SELECT idcelula, setor_idsetor from celula where setor_idsetor = '1’where Data = 34

Pesquisando aqui no fórum li que não tem como fazer filtros com campos virtuais, será que é isso?

Fala Daniel,

Falta um espaço no sc_select(where(add)… Faça assim:

if (!empty([var_semana]))
sc_select_where(add) = " where Data = [var_semana]";
endif

Fala Kleyber, coloquei o espaço mais continua a mensagem de erro:

if (!empty([var_semana])):
sc_select_where(add) = " where Data = [var_semana]";
endif;

sc_select_where(add) = " Data = [var_semana]";

sc_select_where(add) = " Data = ‘[var_semana]’";

Essa query está me dando uma surra tremenda:

if (!empty([var_semana])):
sc_select_where(add) = " Data = ‘[var_semana]’";

endif;

Continuou o erro.

Coloquei também:

if (!empty([var_semana])){
sc_select_where(add) = " Data = ‘[var_semana]’";
}

Continuou o erro!

Eu tinha pego o bonde andando.
Você olhou o webhelp para ver como usar a macro?

http://www.scriptcase.com.br/docs/pt_br/v9/manual/14-macros/01-visao-geral/#sc_select_where

Evento onScriptinit:

if (!empty([var_semana])):

    if (empty({sc_where_atual})){
        sc_select_where(add) = "where Data = '[var_semana]'";
    }else{
        sc_select_where(add) = "AND Data = '[var_semana]'";
    }

endif;

Então Haroldo eu tinha visto essa macro no webhelp mas surgiu as dúvidas:

Coloquei no evento:

if (!empty([var_semana])):

if (empty({sc_where_atual})){
    sc_select_where(add) = "where Data = '[var_semana]'";
}else{
    sc_select_where(add) = "AND Data = '[var_semana]'";
}

endif;

Erro ao acessar o banco de dados
Unknown column ‘Data’ in ‘where clause’
SELECT idcelula, setor_idsetor from celula where setor_idsetor = '1’AND Data = ‘32’

Obs: O campo é virtual por isso que deu esse erro.

Fui e coloquei:

if (!empty([var_semana])):

if (empty({sc_where_atual})){
    sc_select_where(add) = "where '{Data}' = '[var_semana]'";
}else{
    sc_select_where(add) = "AND '{Data}' = '[var_semana]'";
}

endif;

A query passou não deu erro, no entanto, quando coloco a semana no filtro para trazer o relatório não vem nenhum registro.

É fácil identificar o erro:

if (!empty([var_semana])):

    if (empty({sc_where_atual})){
        sc_select_where(add) = " where Data = '[var_semana]'";
    }else{
        sc_select_where(add) = " AND Data = '[var_semana]'";
    }

endif;

Bom dia Haroldo

A Coluna data é um campo do tipo data? Y-m-d ???
Não. estava fazendo uns testes e esqueci de trocar o Nome de Data para Semana.

Sua variável semana esta vindo um número inteiro: 32
Sim. está vindo com um número inteiro. Ex: Semana 52 ae vem o número inteiro 52.

Obs: No flltro tem 2 campos Setor e Semana. O setor está correto porque tem o campo na consulta, mas o Data não tem esse campo na consulta pois ele é um campo virtual que estou fazendo uma query pegando a semana de outra tabela para mostrar nessa consulta.

Agora fiquei mais confuso ainda.

Essa “Data” não faz parte das colunas da query do SQL principal da consulta?

[b]Agora fiquei mais confuso ainda.

Essa “Data” não faz parte das colunas da query do SQL principal da consulta?
[/b]

Não faz parte! eu criei um campo virtual fazendo uma query de outra tabela para colocar na consulta principal

Então tudo abaixo não serviu para nada.

Tabela Frequencia: Está registrado a semana.

Tabela célula: Tem o campo setor onde consigo filtrar pelo setor e tem um campo virtual onde faço uma query pegando a semana de cada célula.

Filtro: Tem o campo setor onde consigo filtrar, e no campo semana(Data) onde não estou conseguindo flltrar pela semana.

Resumo: Gostaria de filtrar além do setor também pela semana.

qual é o sql principal?