select por semana

Delphi

20/12/2013

Boa tarde Pessoal!
meu primeiro tópico aqui no fórum e gostaria muito da ajuda de vcs!
preciso de alguma formar de gerar um relatório ou gráfico que traga do banco as vendas efetuadas dentro das semanas de um mês !
exemplo:

tenho 50 vendas no período 01/11/2013 a 30/11/2013:

primeira semana:
segunda semana :
terceira semana:
quarta semana:

com base nisso gostara de saber quais vendas foram efetuadas dentro de cada semana desse mês;
Marcio Alves

Marcio Alves

Curtidas 0

Respostas

Alessandro Yamasaki

Alessandro Yamasaki

20/12/2013

Qual o banco de dados q vc está usando? Se for o SQL Server, vc pode usar o DATEPART que agrupará por semana.

[]s
GOSTEI 0
Marcio Alves

Marcio Alves

20/12/2013

estou usando .fdb Firebird


Qual o banco de dados q vc está usando? Se for o SQL Server, vc pode usar o DATEPART que agrupará por semana.

[]s
GOSTEI 0
Alex Lekao

Alex Lekao

20/12/2013

eu me intromendo... rssr

se nao me engano no Firebird eh Extract que vc tera que usar.

caso queira dar uma pesquisada seque link
[url]http://www.firebirdsql.org/refdocs/langrefupd15-extract.html[/url]
GOSTEI 0
Marcio Alves

Marcio Alves

20/12/2013

Pois he amigo ele serve estou ultilizando ele no meu codigo porem quero agupar o retorno dentro da semana corrente
ex: dia 1 a 7 primeria semana..........


eu me intromendo... rssr

se nao me engano no Firebird eh Extract que vc tera que usar.

caso queira dar uma pesquisada seque link
[url]http://www.firebirdsql.org/refdocs/langrefupd15-extract.html[/url]
GOSTEI 0
Alex Lekao

Alex Lekao

20/12/2013

entendi...

nao sei se no firebird eh assim, mas talvez vc tera que usar o Case e montar...

eu uso no SQL Server, o case para montar baseado em HOras, Primeira hora, segunda hora, etc...
GOSTEI 0
Marcos Saffran

Marcos Saffran

20/12/2013

Olá Marcio Alves,

fiz um programa, com uma função que retorna as datas iniciais e finais de cada semana, sendo que a semana inicia na segunda-feira.
Ele possui dois edit, (mes e ano), 10 labels (inicio e fim de cada semana) e um botão para calcular.
Se você quiser que a semana inicie no domingo, substitua a função 'DayOfTheWeek' pela 'DayOfWeek'.

Espero que te ajude.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSemanas = Record
    Semana1Ini, Semana2Ini, Semana3Ini, Semana4Ini, Semana5Ini : TDate;
    Semana1Fim, Semana2Fim, Semana3Fim, Semana4Fim, Semana5Fim : TDate;
  end;
  TForm1 = class(TForm)
    edtMes: TEdit;
    edtAno: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    lblSemana1Fim: TLabel;
    lblSemana1Ini: TLabel;
    lblSemana2Fim: TLabel;
    lblSemana3Fim: TLabel;
    lblSemana4Fim: TLabel;
    lblSemana5Fim: TLabel;
    lblSemana2Ini: TLabel;
    lblSemana3Ini: TLabel;
    lblSemana4Ini: TLabel;
    lblSemana5Ini: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    Function Separa(mes, ano : Integer) : TSemanas;
    {mes = mês desejado
     ano = ano desejado}
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TForm1 }

function TForm1.Separa(mes, ano: Integer): TSemanas;
var
  DataIni, DataFinal : TDate;
  DiaDaSemana : Integer;
begin
  DataIni := StrToDate('01/' + IntToStr(mes) + '/' + IntToStr(ano));
  DataFinal := IncDay(DataIni, (DaysInMonth(DataIni) - 1));
  DiaDaSemana := DayOfTheWeek(DataIni);
  result.Semana1Ini := DataIni;
  result.Semana1Fim := IncDay(DataIni, (7 - DiaDaSemana));
  result.Semana2Ini := IncDay(result.Semana1Fim, 1);
  result.Semana2Fim := IncDay(result.Semana2Ini, 6);
  result.Semana3Ini := IncDay(result.Semana2Fim, 1);
  result.Semana3Fim := IncDay(result.Semana3Ini, 6);
  result.Semana4Ini := IncDay(result.Semana3Fim, 1);
  result.Semana4Fim := IncDay(result.Semana4Ini, 6);
  if result.Semana4Fim >= DataFinal then
  begin
    result.Semana4Fim := DataFinal;
    exit;
  end;
  result.Semana5Ini := IncDay(result.Semana4Fim, 1);
  result.Semana5Fim := DataFinal;


end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Semana : TSemanas;
begin
  Semana := Separa(StrToInt(edtMes.Text), StrToInt(edtAno.Text));
  lblSemana1Ini.Caption := DateToStr(Semana.Semana1Ini);
  lblSemana2Ini.Caption := DateToStr(Semana.Semana2Ini);
  lblSemana3Ini.Caption := DateToStr(Semana.Semana3Ini);
  lblSemana4Ini.Caption := DateToStr(Semana.Semana4Ini);
  lblSemana5Ini.Caption := DateToStr(Semana.Semana5Ini);
  lblSemana1Fim.Caption := DateToStr(Semana.Semana1Fim);
  lblSemana2Fim.Caption := DateToStr(Semana.Semana2Fim);
  lblSemana3Fim.Caption := DateToStr(Semana.Semana3Fim);
  lblSemana4Fim.Caption := DateToStr(Semana.Semana4Fim);
  lblSemana5Fim.Caption := DateToStr(Semana.Semana5Fim);

end;

end.
GOSTEI 0
Marcio Alves

Marcio Alves

20/12/2013

Seu codigo parece ser muito bom vou reproduzi-lo aqui e ver se consigo o resultado que eu espero!



Olá Marcio Alves,

fiz um programa, com uma função que retorna as datas iniciais e finais de cada semana, sendo que a semana inicia na segunda-feira.
Ele possui dois edit, (mes e ano), 10 labels (inicio e fim de cada semana) e um botão para calcular.
Se você quiser que a semana inicie no domingo, substitua a função 'DayOfTheWeek' pela 'DayOfWeek'.

Espero que te ajude.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSemanas = Record
    Semana1Ini, Semana2Ini, Semana3Ini, Semana4Ini, Semana5Ini : TDate;
    Semana1Fim, Semana2Fim, Semana3Fim, Semana4Fim, Semana5Fim : TDate;
  end;
  TForm1 = class(TForm)
    edtMes: TEdit;
    edtAno: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    lblSemana1Fim: TLabel;
    lblSemana1Ini: TLabel;
    lblSemana2Fim: TLabel;
    lblSemana3Fim: TLabel;
    lblSemana4Fim: TLabel;
    lblSemana5Fim: TLabel;
    lblSemana2Ini: TLabel;
    lblSemana3Ini: TLabel;
    lblSemana4Ini: TLabel;
    lblSemana5Ini: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    Function Separa(mes, ano : Integer) : TSemanas;
    {mes = mês desejado
     ano = ano desejado}
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

{ TForm1 }

function TForm1.Separa(mes, ano: Integer): TSemanas;
var
  DataIni, DataFinal : TDate;
  DiaDaSemana : Integer;
begin
  DataIni := StrToDate('01/' + IntToStr(mes) + '/' + IntToStr(ano));
  DataFinal := IncDay(DataIni, (DaysInMonth(DataIni) - 1));
  DiaDaSemana := DayOfTheWeek(DataIni);
  result.Semana1Ini := DataIni;
  result.Semana1Fim := IncDay(DataIni, (7 - DiaDaSemana));
  result.Semana2Ini := IncDay(result.Semana1Fim, 1);
  result.Semana2Fim := IncDay(result.Semana2Ini, 6);
  result.Semana3Ini := IncDay(result.Semana2Fim, 1);
  result.Semana3Fim := IncDay(result.Semana3Ini, 6);
  result.Semana4Ini := IncDay(result.Semana3Fim, 1);
  result.Semana4Fim := IncDay(result.Semana4Ini, 6);
  if result.Semana4Fim >= DataFinal then
  begin
    result.Semana4Fim := DataFinal;
    exit;
  end;
  result.Semana5Ini := IncDay(result.Semana4Fim, 1);
  result.Semana5Fim := DataFinal;


end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Semana : TSemanas;
begin
  Semana := Separa(StrToInt(edtMes.Text), StrToInt(edtAno.Text));
  lblSemana1Ini.Caption := DateToStr(Semana.Semana1Ini);
  lblSemana2Ini.Caption := DateToStr(Semana.Semana2Ini);
  lblSemana3Ini.Caption := DateToStr(Semana.Semana3Ini);
  lblSemana4Ini.Caption := DateToStr(Semana.Semana4Ini);
  lblSemana5Ini.Caption := DateToStr(Semana.Semana5Ini);
  lblSemana1Fim.Caption := DateToStr(Semana.Semana1Fim);
  lblSemana2Fim.Caption := DateToStr(Semana.Semana2Fim);
  lblSemana3Fim.Caption := DateToStr(Semana.Semana3Fim);
  lblSemana4Fim.Caption := DateToStr(Semana.Semana4Fim);
  lblSemana5Fim.Caption := DateToStr(Semana.Semana5Fim);

end;

end.
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

20/12/2013

Não sei se o colega já solucionou o problema, mas creio q tem como fazer isso via SP no banco, já tem um tempo q não trabalho com SQL, mas fica a dica.

Boa sorte e bons códigos!
GOSTEI 0
POSTAR