2016-08-24 4 views
0

나는 Account, OrderNo, Createddate 칼럼의 테이블 LabOrder를 가지고있다.이 테이블 하나의 계정에는 여러 개의 orderno가있다. 하지만 제 요구 사항은 CreatedDate를 기반으로 특정 주에 대한 레코드를 가져와 현재 주를 이전 주와 비교하는 것입니다.MySQL에서 백분율을 계산하는 방법은 무엇입니까?

지난 주에 100 개의 주문이 생성되었고 현재 주에 생성 된 주문이 50 일 경우이 특정 계정의 현재 주 주문이 이전 주 주문보다 작거나 같음을 알리고 자합니다. 저는 현재 주간 주문 수가 지난 주 주문보다 50 % 적은 해당 계정으로 전자 메일을 보내드립니다. 우리는 그 계정에 통보해야합니다.

현재 주 주문 수 또는 이전 주 주문과의 차이를 계산 하시겠습니까?

레코드를 가져 오는 것이 더 나은이 요구 사항을 어떻게 달성 할 수 있습니까?

표 이름 :

  1. 저장 프로 시저 만들기보기 만들기

나는 다음과 같은 한 테이블 데이터

  • 을 간단한 쿼리
  • 를 사용 LabOrder을

    Account  orderNo  CreatedDate 
    -------------------------------------- 
    101    13   2016-08-2 
    102    56   2016-08-9 
    103    79   2016-08-24 
    

    다음과 같은 데이터가 필요합니다. 저장 프로시 저는 현재 주와 이전주의 주문을 비교할 것이고 50 % 적다면 50 % 적은 양의 계정을 제공 할 것입니다.

    Account CurrentWeekOrder PreviousWeekOrder Difference(%)    
    --------------------------------------------------------------- 
    101  50     10     -40 
    102  60     180     120 -> This has to be notified 
    103  30     25     5 -> No Need to notified 
    

    위 세부 사항에 대한 저장 프로 시저를 만드는 방법은 무엇입니까? 제가 Java 개발자이고 전에 MySql에 저장 프로 시저를 만들지 않았습니까? 이것은 나의 첫번째 시도이다.

    내가 저장 프로 시저를 만들려고 해요하지만 쿼리가 여러 레코드 :

    을 반환하는 경우 나 저장하는 방법과 같은 문제를 많이 직면하고있어 사람이 어떻게 저장 프로 시저의 경우를 만드는 나에게 아이디어를 제공하는 경우 어떠한 제안.

    감사

  • +2

    샘플 데이터가 원하는 결과와 아무 관련이 없으므로 질문을 이해하기 어렵게 만듭니다. –

    +0

    왜 저장 프로 시저가 필요합니까? – Strawberry

    +0

    @Strawberry 당신은 무엇을 제안합니까? – Sitansu

    답변

    2

    나는 사용자가 레코드를 삽입 할 때마다, 데이터베이스가 같은 주의 이전 레코드를 업데이트하기 때문에 저장 프로 시저가 귀하의 케이스를위한 좋은 선택이 아니다라고 생각합니다. 보기를 사용하여 목표를 달성하는 것이 좋습니다.

    select 
        a.account, 
        a.weekorder as CurrentWeekOrder, 
        b.weekorder as PreviousWeekOrder, 
        a.weekorder/b.weekorder * 100 as Difference 
    from 
        view1 as a 
    left join 
        view1 as b on a.account = b.account and a.createWeek = b.createWeek - 1 
    where 
        a.createWeek = week(now()) and 
        a.weekorder/b.weekorder * 100 < 50 
    
    :

    1. select 
          account, 
          count(*) as weekorder, 
          week(createDate) as createWeek 
      from 
          laborder 
      where 
          week(createDate) >= week(now()) - 1 ----last week and current week 
      group by 
          account, week(createDate) 
      
    2. 지금 당신은 당신이 필요로 조회 할 수 있습니다, 뷰의 이름은 뷰 1 가정하자 다음과 같은 SQL로보기를 만들 : 여기 당신을 위해 내 솔루션입니다

    위의 방법으로 도움을 받으십시오.

    +0

    개인적으로보기가 힘들지 않습니다. – Strawberry

    관련 문제