3

フォームの値のテーブルを指定した SQL クエリが必要です

| id | day1 | day2 | day3 | day4 | day5 |
| 1  |  4   |  0   |  5   | 0    | 0    |
| 2  |  2   |  0   |  0   | 0    | 0    |

与える

| id | trailing_zeros |
| 1  | 2              |
| 2  | 4              |

つまり、各 ID の日の列の連続した後続ゼロの数 (day5 からさかのぼって)

4

4 に答える 4

1

私は力ずくのアプローチを取りました:

CREATE TABLE #temp (id int, day1 int, day2 int, day3 int, day4 int, day5 int)
INSERT INTO #temp (id,day1,day2,day3,day4,day5) VALUES (1,4,0,5,0,0),(2,2,0,0,0,0)

SELECT id,
    CASE 
        WHEN day5=0 AND day4=0 AND day3=0 AND day2=0 AND day1=0 THEN 5
        WHEN day5=0 AND day4=0 AND day3=0 AND day2=0 THEN 4
        WHEN day5=0 AND day4=0 AND day3=0 THEN 3
        WHEN day5=0 AND day4=0 THEN 2
        WHEN day5=0 THEN 1
        ELSE 0
        END AS ConsecutiveTrailingZeros
FROM #temp

もちろん、100 を 2 つの連続する 0 としてカウントする必要がある場合、このアプローチは機能しません。これは SQL Server の構文です。MySQL の調整が必要な場合があります。

しかし、ええ、あなたが何をしていても、あなたのアプローチは最適ではないことは確かです。

于 2013-10-07T19:30:08.623 に答える