1

私は以下のようにテーブルeffort_sheetを持っています、

-----------------------------------------------
Pid WeekendDate 月 火 水 木 金 土 日
----------------------------------------------
11 14.10.2012 4 4 5 1 0 0 0
11 07.10.2012 2 2 1 5 3 0 0
12 07.10.2012 2 2 0 0 0 0 0

ここで、WeekendDate は「Sun」(最後の列) の日付です。

最後にゼロ以外の値が記録されたときの各 Pid の日付を見つける必要があります。だから私の結果は次のようになるはずです

Pid LastValueDate
11 2012.11.10
12 02.10.2012

11 -> 11.10.2012 は Thr(値 1) でした
12 -> 02.10.2012 は火曜日 (値 2)

私のデータはExcelにあるので、JDBC-ODBC接続を使用しています。これは SQL だけで実現できると思います。

私の不完全な解決策(last_effort_dayを見つける必要があります):

ピッドを選択
      ,max(WeekendDate) - (6- last_effort_day ) AS end_date
 FROM エフォートシート
GROUP BY pid

助けてください。

4

5 に答える 5

1
SELECT Pid, MAX(WeekendDate) - (8 - MIN(CHARINDEX('0', CAST(Mon AS nvarchar(10)
                                                       + CAST(Tue AS nvarchar(10))
                                                       + CAST(Wed AS nvarchar(10))
                                                       + CAST(Thr AS nvarchar(10))
                                                       + CAST(Fri AS nvarchar(10))
                                                       + CAST(Sat AS nvarchar(10))
                                                       + CAST(Sun AS nvarchar(10))))) AS last_effort_day
FROM effort_sheet
GROUP BY pid
于 2012-10-16T07:39:24.327 に答える
1
SELECT PID, 
       Dateadd(DAY, -1 * ( CASE 
                             WHEN SUN != 0 THEN 0 
                             WHEN SAT != 0 THEN 1 
                             WHEN FRI != 0 THEN 2 
                             WHEN THR != 0 THEN 3 
                             WHEN WED != 0 THEN 4 
                             WHEN TUE != 0 THEN 5 
                             ELSE 6 
                           END ), WEEKENDDATE) AS end_date 
FROM   EFFORT_SHEET 
GROUP  BY PID 
于 2012-10-16T07:18:47.057 に答える
1

操作が簡単なこのユニオンクエリの使用を開始します。

 Select Pid, WeekendDate-6 As WeekDate, Mon As Num
 From effort_sheet
 Union
 Select Pid, WeekendDate-5 As WeekDate, Tue As Num
 From effort_sheet
 Union
 Select Pid, WeekendDate-4 As WeekDate, Wed As Num
 From effort_sheet

など、曜日ごとに。次に、groupbyクエリを使用できます。

 Select Pid, Max(WeekDate)
 From (the union select above)
 Where Num>0
 Group By Pid

これは標準SQLであり、どのDBMSでも機能するはずです。

于 2012-10-16T07:21:17.123 に答える
1
Try this 
select es.p_id,es.weekenddate-( CASE 
                             WHEN SUN != 0 THEN 0 
                             WHEN SAT != 0 THEN 1 
                             WHEN FRI != 0 THEN 2 
                             WHEN THR != 0 THEN 3 
                             WHEN WED != 0 THEN 4 
                             WHEN TUE != 0 THEN 5 
                             ELSE 6 
                           END )  from(
select p_id,max(weekenddate)dt from effort_sheet group by p_id
  )inner,effort_sheet es
where inner.p_id =es.p_id
AND inner.dt=es.weekenddate;

sqlfiddle リンク

于 2012-10-16T10:42:41.203 に答える
0

これを試して:

select pid, max(case
when mon = 0 then weekenddate - 7
when mon != 0 and tue = 0 then weekenddate - 6
when tue != 0 and wed = 0 then weekenddate - 5
when wed != 0 and thr = 0 then weekenddate - 4
when thr != 0 and fri = 0 then weekenddate - 3
when fri != 0 and sat = 0 then weekenddate - 2
when sat != 0 and sun = 0 then weekenddate -1 end)
from effort_sheet
group by pid
于 2012-10-16T07:22:38.747 に答える